2016-11-03 2 views
3

У меня есть многомерный, который представляет собой динамический массив, как:Как удалить массив из многомерного массива?

Array 
(
    [0] => Array 
     (
      [key] => delete 
      [label] => hi Delete 
     ) 

    [1] => Array 
     (
      [key] => edit 
      [label] => hi Edit 
     ) 

    [2] => Array 
     (
      [key] => update 
      [label] => hi update 
     ) 

) 

теперь я хочу, чтобы удалить массив ниже из выше многомерного массива:

Array 
    (
     [key] => delete 
     [label] => hi Delete 
    ) 

наконец я хочу выход, как:

Array (

[0] => Array 
     (
      [key] => edit 
      [label] => hi Edit 
     ) 

    [1] => Array 
     (
      [key] => update 
      [label] => hi update 
     ) 

) 

Для этого я попробовал, ниже мой код:

<?php 
    $arr1 = array(array("key" => "delete", "label" => "hi Delete"),array("key" => "edit", "label" => "hi Edit"), array("key" => "update", "label" => "hi update")); 
    $diff = array_diff_assoc($arr1, array("key" => "delete", "label" => "hi Delete")); 
    print_r($diff); 
?> 

Но я получить полный $ arr1 на выходе:

Array 
(
    [0] => Array 
     (
      [key] => delete 
      [label] => hi Delete 
     ) 

    [1] => Array 
     (
      [key] => edit 
      [label] => hi Edit 
     ) 

    [2] => Array 
     (
      [key] => update 
      [label] => hi update 
     ) 

) 

, как я могу это сделать, пожалуйста, помогите мне

+0

Вы можете попробовать незаданы ($ arr1 [0]); –

+0

здесь массив динамический, я не знаю индекса –

+0

или проверьте это http://stackoverflow.com/questions/369602/delete-an-element-from-an-array –

ответ

2

Использование array_filter с callback в

$arr1 = array_filter($arr1, function ($var) { 
    return $var['key'] != 'delete'; 
}); 
print_r($arr1); 
+0

Проверьте https://3v4l.org/sGgB3 – Saty

+0

, но порядок индекса не упорядочен должным образом, он удаляет 0-й индекс и запускает массив с 1index –

+0

OP упоминает 1000 записей и, похоже, обеспокоен производительностью, используя php's Функции array_ намного медленнее, чем взаимодействие через коллекцию. – Stuart

1

You должен пройти через массив и проверить ключ, который вы хотите удалить, например: (записанный слепой, так что вам нужно его протестировать!)

<?php 
foreach ($arr1 as $thisArrIndex=>$subArray) 
{ 
    if ($subArray['key'] == "delete") 
    { 
     unset($arr1[$thisArrIndex]); 
    } 
} 
?> 

Предлагаемое редактирование должно было выйти из цикла после нахождения ключа. Кажется, у OP может быть несколько таких клавиш (в нескольких вспомогательных массивах), поэтому я решил не выходить из цикла здесь.

+0

i can not use loop @Stuart, есть ли какая-либо функция, с помощью которой я могу это сделать? –

+0

Почему вы не можете использовать foreach ...? – Stuart

+0

потому что тысячи значений, но уникальные ключи у меня есть –