这是原始数组:
[radios1] => Array
(
[0] => on
)
[from] => Array
(
[0] =>
[1] => Bangalore
[2] =>
[3] =>
)
我想删除每行的空元素,所以我使用此代码来执行此操作:
$array = array_map('array_filter', $_POST);
$array = array_filter($array);
其输出如下
[radios1] => Array
(
[0] => on
)
[from] => Array
(
[1] => Bangalore
)
在这里,我已经能够删除具有空值的键,但过滤后的键应该重新索引。
array_merge()
和array_values()
我都用过,但是没有用。我得到相同的输出;我想要的输出为:
[radios1] => Array
(
[0] => on
)
[from] => Array
(
[0] => Bangalore
)
我会使用array_walk,然后使用array_filter,然后使用array_values来重置索引。
例如:
<?php
$array = [
'radios1' => [
'on'
],
'from' => [
'',
'Bangalore',
'',
'',
]
];
array_walk($array, function (&$value, $key) {
$value = array_values(array_filter($value));
});
print_r($array);
结果:
Array
(
[radios1] => Array
(
[0] => on
)
[from] => Array
(
[0] => Bangalore
)
)
您的编码尝试表明您希望使用
array_filter()
在每个子数组上的默认行为删除所有空的、虚假的、类似零的值,然后重新索引子数组,然后通过调用 array_filter()
删除任何没有子数组的第一级数组再次。
当函数式编程提供简洁的方法时,它会在闭包内部使用迭代函数调用,因此比使用语言结构进行迭代更昂贵。
以下内容提供了相同的功能,无需任何函数调用,并且永远不需要重新索引子数组,因为保留的值在推入结果数组时会被索引。
代码:(演示)
$array = [
'radios1' => [
'on',
],
'empty' => [
'',
false,
],
'from' => [
'',
'Bangalore',
null,
0,
]
];
$result = [];
foreach ($array as $key => $items) {
foreach ($items as $item) {
if ($item) {
$result[$key][] = $item;
}
}
}
var_export($result);
输出:
array (
'radios1' =>
array (
0 => 'on',
),
'from' =>
array (
0 => 'Bangalore',
),
)
对于想要删除空格和空值但保留零(整数或字符串类型)的任何人,请在条件中使用
strlen($item)
。