多维数组查找所有符合条件元素的内容以及他的父级
时间: 2023-10-27 19:04:56 浏览: 39
要查找多维数组中所有符合条件的元素以及它的父级,可以使用递归来实现。
首先,定义一个递归函数,该函数接收一个多维数组和一个条件函数作为参数。函数将遍历数组中的每个元素,并使用条件函数检查该元素是否符合条件。如果符合条件,则将该元素及其父级添加到结果数组中。
下面是一个示例代码:
```php
function searchArray($array, $condition, $path = []) {
$result = [];
foreach ($array as $key => $value) {
$currentPath = array_merge($path, [$key]);
if (is_array($value)) {
$subResult = searchArray($value, $condition, $currentPath);
$result = array_merge($result, $subResult);
} else {
if ($condition($value)) {
$result[] = [
'value' => $value,
'path' => $currentPath
];
}
}
}
return $result;
}
```
该函数接收三个参数:要搜索的多维数组 `$array`、条件函数 `$condition` 和当前路径 `$path`。在函数内部,我们首先定义一个空数组 `$result` 用于保存结果。
然后,我们遍历数组中的每个元素。如果元素是一个数组,我们就递归调用 `searchArray` 函数,并将结果合并到 `$result` 数组中。如果元素是一个标量值,我们就使用条件函数 `$condition` 检查该值是否符合条件。如果符合条件,我们就将该值及其父级路径添加到结果数组中。
最后,函数返回结果数组 `$result`。
以下是一个示例用法:
```php
$array = [
'a' => [
'b' => [
'c' => 1,
'd' => 2
],
'e' => 3
],
'f' => 4
];
$condition = function($value) {
return $value % 2 == 0;
};
$result = searchArray($array, $condition);
print_r($result);
```
输出:
```
Array
(
[0] => Array
(
[value] => 2
[path] => Array
(
[0] => a
[1] => b
[2] => d
)
)
[1] => Array
(
[value] => 4
[path] => Array
(
[0] => f
)
)
)
```
在这个示例中,我们定义了一个多维数组 `$array`,其中包含了符合条件的元素。我们定义了一个条件函数 `$condition`,用于检查元素是否为偶数。然后,我们调用 `searchArray` 函数,并将数组和条件函数作为参数传递。函数返回一个数组,其中包含了符合条件的元素及其父级路径。最后,我们将结果打印出来。