Search code examples
phparray-filter

php: array_filter inside loop returns array with different index


I have this code:

$array = [0, 1, 2];
for($i = 0; $i <= 2; $i++){
   $filtered = array_filter($array, function($elem) use ($i){
      return ($elem == $i);
   });
   var_dump($filtered);
}

The result is the following:

array (size=1)
  0 => 0
array (size=1)
  1 => 1
array (size=1)
  2 => 2

My question is why I get different index for the $filtered result ?!!
The result should be like this:

array (size=1)
   0 => 0
array (size=1)
   0 => 1
array (size=1)
   0 => 2

Solution

  • Just wrap your array_filter() with array_values(). Let's try like this way-

    <?php
    $array = [0, 1, 2];
    for($i = 0; $i <= 2; $i++){
       $filtered = array_values(array_filter($array, function($elem) use ($i){
          return ($elem == $i);
       }));
       var_dump($filtered);
    }
    

    DEMO: https://3v4l.org/X1iSF