2013-05-01 9 views
0

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

$info = array(
    '1' => array('name' => 'abc', 'marks' => '56'), 
    '2' => array('name' => 'def', 'marks' => '85'), 
    '3' => array('name' => 'ghi', 'marks' => '99'), 
    '4' => array('name' => 'jkl', 'marks' => '73'), 
    '5' => array('name' => 'mno', 'marks' => '59') 
); 
    $remove = array(1,3); 

Желаемая Выход:

$info = array(
    '1' => array('name' => 'def', 'marks' => '85'), 
    '2' => array('name' => 'jkl', 'marks' => '73'), 
    '3' => array('name' => 'mno', 'marks' => '59') 
); 

До сих пор я пытался эти два метода. Ничто не сработало для меня.

if (($key = array_search(remove[0], $info))) { 
    unset($info[$key]); 
    $info = array_values($info); 
    } 

И

$result = array_diff($info, $remove); 
+0

вам нужно сохранить массив в качестве ассоциированного массива, как это с заданными ключами делать? – Ding

ответ

1

Что-то, как это будет работать:

$result = array_diff_key($info, array_flip($remove)); 

Это array_flip() твой $remove массив таким образом, ключи становятся значениями, а значения становятся ключами. Затем мы делаем различие от ключей с array_diff_key() обоих массивов, to get this result:

Array 
(
    [2] => Array 
     (
      [name] => def 
      [marks] => 85 
     ) 

    [4] => Array 
     (
      [name] => jkl 
      [marks] => 73 
     ) 

    [5] => Array 
     (
      [name] => mno 
      [marks] => 59 
     ) 

) 

Наконец, чтобы получить ваш точный результат, вы можете проиндексировать ваш массив, пропуская его через array_values(), но это даст последовательные индексы, начиная в нуле, а не один:

$result = array_values(array_diff_key($info, array_flip($remove))); 

Если вы действительно нужны индексы, чтобы начать с одной стороны, вы будете нуждаться в комбинации array_combine() и range():

$result = array_diff_key($info, array_flip($remove)); 
$result = array_combine(range(1, count($result)), $result); 
+0

И затем переиндексируйте ключи (начиная с 1 как-то), и все готово;) – dbf

+0

@dbf - Хорошо, добавлю, что в. – nickb

+0

Большое спасибо. Это замечательно!!! –

0

Как насчет использования array_diff функция?

Пример

$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 
print_r($result); 

это Выведет

Array 
(
    [1] => blue 
) 
+0

Используется уже. Не работал. –

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