2011-12-29 2 views
4

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

Например, предположим, что у меня есть этот массив:

$array = array(
    'one' => array('item' => '1'), 
    'two' => array('item' => '2') 
); 

Если я хочу, чтобы сбросить вложенную массив с ключом «два», я мог бы сделать:

unset($array['two']) 

или если бы я хотел которая должна быть сброшена только массив элементов для ключа «два», я мог бы сделать:

unset($array['two']['item']) 

Я хочу, чтобы динамически удалять элементы массива на основе известных ключи. Так, например, я знаю, что хочу удалить ['two']['item'].

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

Пример:

//This works fine if it's only the first item in the array 
function deleteArray($keys) 
{ 
    unset($this->array[$keys]); 
} 

Но когда мы хотим удалить вложенные элементы, это не будет работать. Я мог бы передать ключи как массив, такой как array('two', 'item') и построить индекс, но не знаю, как ....

Любая помощь была бы замечательной! Спасибо!

ответ

6

Вы можете использовать эту функцию:

function delete(&$array, $keys) 
{ 
    $key = array_shift($keys); 

    if (count($keys) == 0) 
     unset($array[$key]); 
    else 
     delete($array[$key], $keys); 
} 
0
function deleteArray($keys) 
{ 
$keyarray = explode($keys, " "); 
    unset($this->array[$keyarray[0]][$keyarray[1]]); 
} 

Я отредактировал его немного (не сработает!), Возможно, кто-то может продолжить это. Может быть, это возможно с некоторым временем() ...

+0

Что делать, если есть 10 аргументов? В идеале количество аргументов будет динамическим. – David

+0

Ну нет, я не знаю, возможно ли это. – Dion

+0

Это нехорошее и динамичное решение. –

1

Попробуйте с рекурсивной функцией:

function deleteArray(&$array, $keys) { 
    if (count($keys) == 1) 
     unset($array[$keys[0]]); 
    else 
    { 
     $k = array_shift($keys); 
     deleteArray($array[$k],$keys); 
    } 
} 
deleteArray($this->arr, array("three","item","blabla")); // This erase $this->array["three"]["item"]["blabla"] 
Смежные вопросы