Marco Marco - 6 months ago 43
PHP Question

Fill up array with missing elements

I have an array which looks like this:

array:6 [▼
0 => 2
1 => 2
2 => 2
6 => 5
10 => 3
11 => 1
]


I would like to check for a range of numbers e.g. 0 to 11 if these keys exist in my array. If not I want to create the element with the missing key and give it the value 0.

So I would end up with an array like this:

array:6 [▼
0 => 2
1 => 2
2 => 2
3 => 0
4 => 0
5 => 0
6 => 5
7 => 0
8 => 0
9 => 0
10 => 3
11 => 1
]


I tried something like this:

$range = range(0,11);

foreach($myArray as $key => $value){
if(!in_array($key, $range)){
$myArray[$key] = 0;
}
}


But I just get the same array as at the beginning of the question.

Answer

You can create an array with array_fill_keys() and pass it the amount of keys you want with range() and fill the array with 0's. After that you can replace all elements which you already have in your array with array_replace().

<?php

    $array = [2 => 3, 5 => 2, 11 => 7];

    $result = array_replace(array_fill_keys(range(0, 11), 0), $array);
    print_r($result);

?>

The problem with your code is that you only loop over the elements of your array. So if you have just 3 elements you will just loop over these 3 elements.

If you want to fix your current code you would have to loop over the $range and then check if the key, not the value, exists in your array and if yes use the value from it otherwise create the element with the value 0.

Fixed code:

$range = range(0,11);
$result = [];

foreach($range as $key){
    if(isset($array[$key]))
        $result[$key] = $array[$key];
    else
        $result[$key] = 0;
}