Учитывая массив массивов, как я могу заменить все пустые значения на 0? - PullRequest
1 голос
/ 15 апреля 2010

Пример массива

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

Все нули должны быть заменены на 0. Я надеялся, что у кого-нибудь будет эффективный способ сделать это, возможно, встроенная функция PHP, о которой я не знаю.

Ответы [ 2 ]

18 голосов
/ 15 апреля 2010

Вы можете использовать функцию array_walk_recursive с функцией обратного вызова, которая заменит null на 0.


Например, учитывая, что ваш массив объявлен так:

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

Примечание: я предположил, что вы сделали опечатку, и ваши массивы содержат не только строку, но несколько подэлементов.


Вы можете использовать этот код:

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


Со следующей функцией обратного вызова:

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

Обратите внимание, что:

  • первый параметр передается по ссылке!
    • , что означает, что изменение его изменит соответствующее значение в вашем массиве
  • Я использую оператор === для сравнения


И вы получите следующий вывод:

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
2 голосов
/ 15 апреля 2010

Если одиночные кавычки являются непреднамеренными, а массивы имеют целые числа и нулевые значения:

for ($i = 0; $i < count($myArray); $i++)
{
    if ($myArray[$i] == null) $myArray[$i] = 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...