tags:

views:

129

answers:

2

Example array

$myArray[0] = array('23', null, '43', '12');
$myArray[1] = array(null, null, '53', '19');
$myArray[2] = array('12', '13', '14', null);

All nulls should be replaced with 0. I was hoping someone would have an efficient way of doing this, perhaps a built in PHP function that I am unaware of.

+11  A: 

You could use the array_walk_recursive function, with a callback function that would replace null by 0.


For example, considering your array is declared this way :

$myArray[0] = array(23, null, 43, 12);
$myArray[1] = array(null, null, 53, 19);
$myArray[2] = array(12, 13, 14, null);

Note : I supposed you made a typo, and your arrays are not containing only a string, but several sub-elements.


You could use this kind of code :

array_walk_recursive($myArray, 'replacer');
var_dump($myArray);


With the following callback functon :

function replacer(& $item, $key) {
    if ($item === null) {
        $item = 0;
    }
}

Note that :

  • the first parameter is passed by reference !
    • which means modifying it will modify the corresponding value in your array
  • I'm using the === operator for the comparison


And you'd get the following output :

array
  0 => 
    array
      0 => int 23
      1 => int 0
      2 => int 43
      3 => int 12
  1 => 
    array
      0 => int 0
      1 => int 0
      2 => int 53
      3 => int 19
  2 => 
    array
      0 => int 12
      1 => int 13
      2 => int 14
      3 => int 0
Pascal MARTIN
+1 for a thorough and well-explained answer.
James Burgess
@Felix : no, `$item` should not be an array : I'm using the **recursive** function ;-) which means the callback is called for the sub-elements *(integers)*, and not the elements *(arrays)* themselves.
Pascal MARTIN
@Pascal MARTIN: I noticed it seconds after my comments that is why i deleted my comment ;)
Felix Kling
+1  A: 

If the single quotation marks are unintentional, and the arrays have integers and null values:

for ($i = 0; $i < count($myArray); $i++)
{
    if ($myArray[$i] == null) $myArray[$i] = 0;
}
JYelton