2016-05-04 3 views
0

У меня есть два массива. Мне нужно удалить элемент из первого массива, когда элемент включен во второй массив.Как удалить элемент массива из сравнения с другим элементом массива?

.: например

$First = array("apple"=>"7", "orange"=>"8", "strawberry"=>"9", "lemon"=>"10", "banana"=>"11"); 

$Second = array("orange"=>"1", "lemon"=>"1","banana"=>"1"); 

$Result = array("apple"=>"7","strawberry"=>"9"); 

Я использовал следующий код, но он не работает:

foreach($Second as $key){ 
    $keyToDelete = array_search($key, $First); 
    unset($First[$keyToDelete]); 
} 
print_r($First); 

ответ

2

Вы близки!

Во-первых,

foreach ($Second as $key) 

только даст вам значение. Чтобы получить ключ вы должны сделать

foreach ($Second as $key => $value) 

Loop через $ Второй массив, а затем, если они ключ существует (используйте isset) в $ Первый массив удалить его с помощью unset. $ Второй будет таким же, как $ Результаты

foreach ($Second as $key => $value) { 
    if (isset($First[$key])) { 
     unset($First[$key]); 
    } 
} 

В качестве альтернативы, если вы хотите, чтобы держать $ First и $ вторых, как они, то вы можете сделать следующее:

foreach ($Second as $key => $value) { 
    if (!isset($First[$key])) { 
     $Results[$key] = $value; 
    } 
} 
+0

да это работа для меня ... Большое спасибо ... @ rharvey –

+2

, если вы отменили, то вы потеряли данные. –

+0

, но в моем случае данные поступают из db, и я просто используется для показа с удалением дублирования. –

7

Использование array_diff_key - http://php.net/manual/en/function.array-diff-key.php

$First = array("apple"=>"7", "orange"=>"8", "strawberry"=>"9", "lemon"=>"10", "banana"=>"11"); 
$Second = array("orange"=>"1", "lemon"=>"1","banana"=>"1"); 
$Result = array_diff_key($First, $Second); 
+0

хороший ответ. +1 вверх –

+0

мой плохой, измененный на 'array_diff_key' - проверял его прямо сейчас, результат такой же, как и у OP – Mark

+0

также изменить верхнюю часть –

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