简体   繁体   中英

Given an array of arrays, how can I replace all empty values with 0?

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.

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

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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM