1

У меня есть это 2 массива:PHP - array_diff с двумя массивами с различной размерностью

$haystack = array("rowid" => array("100", "200"), "description" => array ("something", "something else")); 
$needle = array("rowid" => array("200", "300", "400"), "description" => array ("something else", "other", "other else"), "test" => "bye"); 

Я хочу сделать array_diff с $ иглы и $ стогом, но я получаю сообщение об ошибке, потому что $ игольчатого массив является многомерным, но " тест»ключ имеет только одно измерение:

foreach ($needle as $key => $value) : 
$left[$key] = array_diff($needle[$key],$haystack[$key]); 
endforeach; 

Предупреждение: array_diff(): Аргумент # 1 не является массивом
Предупреждение: array_diff(): Аргумент # 2 не является массивом

Как я могу решить проблему? Мне нужно поддерживать в $ left array только значения «rowid» и «description» (я могу отказаться от значения «test»).

$ осталось должно быть:

Array 
(
    [rowid] => Array 
     (
      [0] => 300 
      [1] => 400 
     ) 

    [description] => Array 
     (
      [0] => other 
      [1] => other else 
     ) 

) 

Спасибо за помощь!

+0

Вы проезжаете свой массив и пытаетесь «array_diff» каждого элемента. Но наше последнее 'test'-значение не является массивом. Поэтому вы получаете предупреждение. Проверьте элемент перед тем, как передать его функции с помощью функции 'is_array()' – Fuzzyma

ответ

0

удалить "test" => "bye"; от $ иглы или напишите их надлежащим образом.

//array_diff takes arguments as array. 
foreach ($needle as $key => $value) : 
$left[$key] = array_diff($needle[$key],$haystack[$key]); 
//when $key = test $needle[$key]=bye which is not array 
//thats why you got Warning: array_diff(): Argument #1 is not an array this warning 

//again when $key=test ,$haystack[$key]=null which is not array 
//thats why you got Warning: array_diff(): Argument #2 is not an array 
endforeach; 
+0

OK. Но если я не знаю, сколько «тестов» или другого ключа находится в $ иглах? Как я могу фильтровать только клавиши «rowid» и «description»? Спасибо! – Davide

 Смежные вопросы

  • Нет связанных вопросов^_^