gpt4 book ai didi

"simple"多级数组上的 PHP Array_filter

转载 作者:行者123 更新时间:2023-12-04 21:48:53 26 4
gpt4 key购买 nike

我可以以及如何使用 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){ ??? }) 不太确定从这里去哪里...我打算 foreach 数组来深入研究它,但是如何这会影响通过 array_filter 的条目吗? true/false 返回不会带来整个 [2400] 数组部分吗?这让我很困惑。

请对问题提出改进建议

最佳答案

我认为仅使用 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));

这个想法非常简单。

  1. 获取一个数组并逐一检查元素。
  2. 如果元素是数组,则对该元素应用函数并检查结果。我们可以从子数组中删除所有内容,在这种情况下,我们不应该将其添加到结果中。否则,如果 child 在清理后还有剩余的东西,则在我们的结果集中包含“已清理的 child ”。
  3. 如果我们的元素不是数组,则仅当它不为空时才包含它。

如果您发现任何错误或者它是否适合您,请告诉我。

关于 "simple"多级数组上的 PHP Array_filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37056326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com