PHP数组“过滤器打开”;简单的;多级阵列
我可以并且如何使用PHP的PHP数组“过滤器打开”;简单的;多级阵列,php,arrays,array-filter,Php,Arrays,Array Filter,我可以并且如何使用PHP的array\u filter从以下数组结构中过滤空/空条目 From:该数组来自使用Fetch和Fetch的PDO调用,因此在这种情况下,数值和命名值始终相等 Array ( [2400] => Array ( [0] => Array ( [value] => 7 [0] => 7
array\u filter
从以下数组结构中过滤空/空条目
From:该数组来自使用Fetch和Fetch的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
)
)
)
我试过了
- 普通旧
数组\u过滤器
并且不太确定从这里到哪里去。。。我本打算让数组深入研究它,但这将如何影响通过array\u过滤器(数组,函数($f){???})
的条目?真/假返回不会带来整个[2400]数组部分吗?这让我很困惑array\u filter
请建议对问题的改进使用
array\u filter
并测试value
元素(或0
元素,因为它们是等效的)
要对外部数组的所有元素执行此操作,请使用foreach
循环
foreach ($array as &$subarray) {
$subarray = array_filter($subarray, function($element) {
return $element['value'];
});
}
或数组\u映射
:
$array = array_map(function($subarray) {
return array_filter($subarray, function($element) {
return $element['value'];
});
}, $array);
如果阵列结构保持不变,则这应该可以工作:
foreach ($array as &$innerArray) {
$innerArray = array_filter($innerArray, function($arr) {
return (!empty($arr[0]));
});
}
unset($innerArray);
我认为仅使用函数无法做到这一点,因为有时需要修改数组元素,但
array\u 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));
<代码> DOD,您想删除任何空的或两者都无效的ANTY?任何空的或空的,计算为“false”的正常标准,您可以使用<代码> ARAYYMAP 浏览和删除空数组。@ AgTestFravaTurr如果数字元素是空的,但命名元素不是,反之亦然呢?或者它们总是等价的,就像在你的例子中那样?看起来这些数组来自
mysqli\u fetch\u数组
,它为每个选定列返回数字和命名元素,它们是相同的。hmm。。“2400”键是可变的,可以更改。所以循环数组的所有元素。是的,这就是我在尝试其他答案中的建议时遇到的问题。它将为我提供空白数组,而不是完全排除该键。我确实创建了自己的函数来循环数组并逐个检查元素,这完全符合我的需要。我相信你最好地回答了我的问题,“array_filter是否适用于此?”
<?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));