2011-12-29 55 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"]