我想从PHP数组中删除键1。我知道如何通过使用foreach循环来实现此目的,但是我想要array_filter
解决方案。谁知道我该如何使用数组过滤器方法实现这一目标?
PHP数组:
Array (
[0] => Array
(
[0] => 5000
[1] => 25
[2] => 44
)
[1] => Array
(
[0] => 5000
[1] => 25
[2] => 48
)
[2] => Array
(
[0] => 5000
[1] => 26
[2] => 44
)
[3] => Array
(
[0] => 5000
[1] => 26
[2] => 48
)
)
预期结果:
Array
(
[0] => Array
(
[0] => 5000
[1] => 44
)
[1] => Array
(
[0] => 5000
[1] => 48
)
[2] => Array
(
[0] => 5000
[1] => 44
)
[3] => Array
(
[0] => 5000
[1] => 48
)
)
答案 0 :(得分:2)
您不能为此目的使用array_filter()
。请改用array_reduce()
$newArr = array_reduce($array, function($carry, $item){
$carry[] = [$item[0], $item[2]];
return $carry;
});
在demo中查看结果
答案 1 :(得分:0)
您不能为此使用array_filter
。 array_filter
处理这些值,但您要删除特定的键。
使用array_splice()
删除索引并调整以下所有增量。
foreach ($array as &$element) {
array_splice($element, 1, 1);
}
&
使其成为参考变量,因此修改变量会影响数组中的元素。
答案 2 :(得分:0)
如果处理索引数组的数组,@Barmar 的迭代 array_splice()
调用是理想的,因为它们在删除目标键后重新索引子数组。这是他的答案的功能性和动态变化。
$array = [
[5000, 25, 44],
[5000, 25, 48],
[5000, 26, 44],
[5000, 26, 48],
];
$omitKey = 1;
var_export(
array_map(
function($row) use($omitKey) {
array_splice($row, $omitKey, 1);
return $row;
},
$array
)
);
如果你有一个关联数组(没有索引),那么 array_splice()
不是正确的工具,因为它依赖于位置,而不是键。改用 unset()
。
$array = [
['a' => 5000, 'b' => 25, 'c' => 44],
['a' => 5000, 'b' => 25, 'c' => 48],
['a' => 5000, 'b' => 26, 'c' => 44],
['a' => 5000, 'b' => 26, 'c' => 48],
];
$omitKey = 'b';
var_export(
array_map(
function($row) use($omitKey) {
unset($row[$omitKey]);
return $row;
},
$array
)
);