2011-12-29 56 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 2011-12-29 21:52:49

+0

嗯,不,我不知道这是可能的。 – Dion 2011-12-29 22:01:56

+0

这不是一个好的动态解决方案。 – 2011-12-29 22:10:40

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"]