我可以和如何使用PHP的array_filter
过滤以下数组结构中的空/空条目吗?
发件人:该数组来自使用Fetch BOTH的PDO调用,因此在这种情况下,数值和命名值始终相等。
Array
(
[2400] => Array
(
[0] => Array
(
[value] => 7
[0] => 7
)
[1] => Array
(
[value] => 61
[0] => 61
)
[2] => Array
(
[value] => 42
[0] => 42
)
[3] => Array
(
[value] =>
[0] =>
)
)
)
要
Array
(
[2400] => Array
(
[0] => Array
(
[value] => 7
[0] => 7
)
[1] => Array
(
[value] => 61
[0] => 61
)
[2] => Array
(
[value] => 42
[0] => 42
)
)
)
我试过了
array_filter
array_filter(array, function($f){ ??? })
并且不太确定从哪里开始......我打算对数组进行深入研究,但是这会如何影响array_filter
的条目?真/假返回不会带来整个[2400]数组部分吗?它让我很困惑。请建议改进问题
答案 0 :(得分:2)
使用array_filter
并测试value
元素(或0
元素,因为它们相同)。
$array[2400] = array_filter($array[2400], function($element) {
return $element['value'];
});
要对外部数组的所有元素执行此操作,请使用foreach
循环。
foreach ($array as &$subarray) {
$subarray = array_filter($subarray, function($element) {
return $element['value'];
});
}
或array_map
:
$array = array_map(function($subarray) {
return array_filter($subarray, function($element) {
return $element['value'];
});
}, $array);
答案 1 :(得分:2)
我认为仅使用array_filter
函数无法完成此操作,因为有时您需要修改数组元素,但array_filter
函数只允许决定是否应该排除该元素。
例如,在主数组中,索引为2400的元素应该包含在结果集中,但是应该修改它的内容。
我写了一个简单的函数来做到这一点,希望它可能有所帮助。好吧,你可以用它来获取灵感。对我来说这也是一个有趣的挑战。
以下是我的功能测试。
<?php
function deepFilter(array $array)
{
// Formally this is not need because if array is empty then $filteredArray will also be empty
// but it simplifies the algorithm
if (empty($array)) {
return [];
}
$filteredArray = [];
foreach ($array as $key => $value) {
if (is_array($value) && !empty($value)) {
$value = deepFilter($value);
}
if (!empty($value)) {
$filteredArray[$key] = $value;
}
}
return $filteredArray;
}
$testArray1 = [
2400 => [
0 => [
'value' => 7,
0 => 7,
],
1 => [
'value' => 61,
0 => 61,
],
2 => [
'value' => 42,
0 => 42,
],
3 => [
'value' => null,
0 => null,
]
]
];
$testArray2 = [
2400 => [
0 => [
'value' => 7,
0 => 7,
],
1 => [
'value' => 61,
0 => 61,
],
2 => [
'value' => 42,
0 => 42,
],
3 => null
],
3243 => [
0 => [
'value' => 7,
0 => null,
],
1 => [
'value' => null,
0 => 61,
],
2 => [
'value' => 42,
0 => 42,
],
3 => null
]
];
var_export(deepFilter($testArray1));
var_export(deepFilter($testArray2));
这个想法非常简单。
如果您发现任何错误或是否适合您,请告诉我。
答案 2 :(得分:1)
如果数组结构保持不变,那么这应该有效:
{{1}}