Я думаю, что вы можете использовать array_filter
функцию, чтобы удалить нулевые значения в обоих массиве, а затем объединить их
$a = array(
'a' => NULL,
'b' => 1,
'c' => 1
);
$b = array(
'a' => 1,
'b' => NULL,
'c' => 1
);
$b = array_filter($b);
$a = array_filter($a);
$c = array_merge($a, $b);
var_dump($c);
Этот выход будет
array(3) {
["b"]=> int(1)
["c"]=> int(1)
["a"]=> int(1)
}
LIVE SAMPLE
Как примечание стороны я хотел бы добавить, что использование array_filter
без второго параметра будет в конечном итоге в удалении всех NULL
значения, а также EMPTY
массив и т.д. Если вы хотите удалить только NULL
значения, так что вам нужно будет использовать array_filter($yourarray, 'strlen');
РЕДАКТИРОВАНИЕ
Если вы хотите сохранить NULL
, если оба массива имеет его с тем же ключом и предполагая, что оба массива имеет одинаковое количество ключей/значений, то вам нужно будет петля внутри массива и построить новый массив, сохраняющий NULL
где вам нужно
$a = array(
'a' => NULL,
'b' => 1,
'c' => 1,
'd' => NULL
);
$b = array(
'a' => 1,
'b' => NULL,
'c' => 1,
'd' => NULL,
);
$c = array();
foreach($a as $key => $val)
{
if($key == NULL && $b[$key] == NULL)
{
$c[$key] = $val;
} else if($key != NULL && $b[$key] == NULL) {
$c[$key]= $val;
} else if($key != NULL && $b[$key] != NULL) {
$c[$key]= $b[$key];
} else {
$c[$key]= $b[$key];
}
}
var_dump($c);
Это выведет
array (size=4)
'a' => int 1
'b' => int 1
'c' => int 1
'd' => NULL
LIVE SAMPLE
Что делать, если там будет 'd' индекс нуль на только 1 из массивов. Я имею в виду перезаписывать «нули», если это возможно, если они не должны оставаться. В этом случае ВСЕ нули будут удалены. – pie6k
@ Kluska000 Я обновил свой ответ, подгоняя ваш запрос, пожалуйста, отметьте его – Fabio
на основе вашего решения. Я пробовал это - кажется, работает и проще http://phpfiddle.org/lite/code/rqz-sd4 – pie6k