[英]Unset a column in a multidimensional array
我有這個數組 $output 看起來像這樣:
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
)
)
不能用一個簡單的命令來完成,但你可以使用一個循環:
foreach(array_keys($output) as $key) {
unset($output[$key][1]);
}
您可以遍歷數組,並在每個子數組中unset()
您想要的內容:
foreach($output as &$item) {
unset($item[2]);
}
unset($item); // unset reference
干凈整潔:
$f = function(&$a,$k) { unset($a[1]); };
array_walk($arr, $f);
要么:
array_walk($arr, function (&$a, $k) {
unset($a[1]);
});
您將使用array_map
和array_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)
}
}
雖然 splice 將更新索引:
$ 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)
}
}
foreach($array as $key=>$val){ unset($val[1]); }
我用這個:
public function array_unset_key_in_children($array, $keyToUnsetInChildren)
{
$newArray = [];
foreach($array as $key=>$subArray) {
unset($subArray[$keyToUnsetInChild]);
$newArray[$key] = $subArray;
}
return $newArray;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.