2016-05-27 2 views
1

У меня есть два массиваPHP сравнить два массива и получить разницу

$original = array(
array('fruit' => 'appel','color' => 'green'), 
array('fruit' => 'Banana','color' => 'Yellow'), 
array('fruit' => 'orange','color' => 'orange',) 
); 

и

$new = array(
array('fruit' => 'appel'), 
array('fruit' => 'orange') 
); 

Теперь я хочу, чтобы сравнить два массива и распечатать другой. В этом случае я хочу, чтобы держать

array('fruit' => 'Banana','color' => 'Yellow') 

Когда я использую array_intersect_key

$original_new = array_intersect_key($new, $original); 

это удаление массива я хочу сохранить. Я думал, что я это сделать:

$original_new = array_intersect_key($new, $original); 
$original_new = array_diff($original_new, $original); 

Но это, конечно, не работает. Может кто-нибудь помочь мне в этом?

+0

Вам нужна функция массива или необработанного код? –

+0

На мой взгляд, теперь массив ('fruit' => 'Banana', 'color' => 'Yellow') удален. Но я хочу, чтобы это был единственный массив, который я хочу сохранить. – Roland

+0

Вы проверили мой ответ? –

ответ

1

Использование некоторых циклов и массивов. Check Online.

Сначала сделайте массив из $new массива только с колонкой, и с помощью петли Еогеаспа над $original массивом просто проверить плод находится в $new массиве или нет, если не чем хранить полный массив к югу в имени массива $arr ,

$arr = array(); 
$com = array_column($new, 'fruit'); 
foreach($original as $value){ 
    if(!in_array($value['fruit'], $com)){ 
     $arr[] = $value; 
    } 
} 

print_r($arr); //Array ([0] => Array ([fruit] => Banana [color] => Yellow)) 
+1

Thx! Это работает1 – Roland

0

(PHP 4> = 4.0.1, PHP 5, PHP-7) array_diff - Вычисляет разность массивов

Сравнивает массив1 против одного или нескольких других массивов и возвращает значения в array1, не присутствует ни в одном из других массивов.

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); 
$a2=array("e"=>"red","f"=>"green","g"=>"blue"); 

$result=array_diff($a1,$a2); 
print_r($result); 

Это вернет

Array ([d] => yellow) 
+0

Это не сработает для одномерного массива –

+0

Тогда вы можете использовать его с петлей или чем-то –

0

Просто, чтобы обеспечить различные точки зрения,

Вы можете получить решение, используя некоторые функции массива

вам просто нужно, чтобы получить array_column фрукты из массива $new и того же массива $original, получите array_diff из 2 массивов, наконец получите е key,

просто попробуйте это:

$res = $original[key(array_diff(
     array_column($original,'fruit'), array_column($new,'fruit')))]; 
0

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

$res = array_intersect_key($original, 
      array_diff(array_column($original, 'fruit'), 
         array_column($new, 'fruit'))); 

demo

+0

Это тоже хорошее решение. Спасибо! – Roland

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