2011-08-31 56 views
10

我有這個數組$輸出看起來像這樣:PHP - 取消所有在多維數組

Array(
    [0] => Array(
     [0] => 1a 
     [1] => 1b 
     [2] => 1c 
    ) 
    [1] => Array(
     [0] => 2a 
     [1] => 2b 
     [2] => 2c 
    ) 
    [2] => Array(
     [0] => 3a 
     [1] => 3b 
     [2] => 3c 
    ) 
    [3] => Array(
     [0] => 4a 
     [1] => 4b 
     [2] => 4c 
    ) 
) 

等等...

當我想刪除第二個元素我只是用

$output = unset($output[1]); 

得到如下:

Array(
    [0] => Array(
     [0] => 1a 
     [1] => 1b 
     [2] => 1c 
    ) 
    [1] => Array(
     [0] => 3a 
     [1] => 3b 
     [2] => 3c 
    ) 
    [2] => Array(
     [0] => 4a 
     [1] => 4b 
     [2] => 4c 
    ) 
) 

我的問題是如何刪除數組中每個元素的第二個元素([0] [1],[1] [1],[2] [1],[3] [1],...)得到如下:

Array(
    [0] => Array(
     [0] => 1a 
     [1] => 1c 
    ) 
    [1] => Array(
     [0] => 2a 
     [1] => 2c 
    ) 
    [2] => Array(
     [0] => 3a 
     [1] => 3c 
    ) 
    [3] => Array(
     [0] => 4a 
     [1] => 4c 
    ) 
) 
+0

[unset()](http://es.php.net/unset)不會返回任何內容。 –

回答

5

可以迭代這個數組,並unset()希望每個子陣列中的內容:

foreach($output as &$item) { 
    unset($item[2]); 
} 
unset($item); // unset reference 
+1

確保你包含'&'就像上面的arnaud一樣,當你調用unset時需要引用它。 – sMyles

18

不能用一個簡單的命令來完成,但可以使用一個循環:

foreach(array_keys($output) as $key) { 
    unset($output[$key][1]); 
} 
+1

非常有幫助,謝謝!要增加你的答案,如果你想在未設置之後繼續保留你的剩餘密鑰,你可以在你的'foreach'的末尾加入(和之內):'$ output [$ key] = array_values($ output [$ key ]);'。 'array_values()'將重新設置鍵,使它們從零開始連續。 – Mike

1
foreach($array as $key=>$val){ unset($val[1]); } 
1

你會使用的array_maparray_splice組合:

function removeSecond(array &$arr) 
{ 
    array_splice($arr, 1, 1); 
} 
$out = array_map('removeSecond', $input); 

unset的問題是,它會留下的指標,因爲他們是:

$ php -r '$arr = array(array(0,1,2)); unset($arr[0][1]); var_dump($arr);' 
array(1) { 
    [0]=> 
    array(2) { 
    [0]=> 
    int(0) 
    [2]=> 
    int(2) 
    } 
} 

雖然拼接將更新索引:

$ php -r '$arr = array(array(0,1,2)); array_splice($arr[0], 1, 1); var_dump($arr);' 
array(1) { 
    [0]=> 
    array(2) { 
    [0]=> 
    int(0) 
    [1]=> 
    int(2) 
    } 
} 
1

乾淨整潔:

$f=function(&$a,$k) { unset $a[1]; }; 
array_walk($arr,$f); 
+1

乾淨整潔?怎麼這樣?... – Petah

+0

讓你想要電子巴掌'他們 –