PHP中如何通过嵌套子数组元素查找并返回父数组?
根据嵌套数组子元素值获取父级数组
假设我们有如下多维数组:
$array = [ [ 'name' => 'john', 'age' => 25, 'children' => [ 'jane', 'jeff', ], ], // 更多数组元素... ];
已知可以通过以下方式查找顶层字段对应的父数组索引:
array_search('john', array_column($array, 'name')); // 返回0
现在需要实现:通过子数组children中的元素(比如jeff),找到对应的完整父级子数组。
解决方案
基础实现(仅一级嵌套)
遍历数组,检查每个元素的children子数组是否包含目标值,找到后返回该父数组:
function findParentByChild($array, $childName) { foreach ($array as $item) { if (isset($item['children']) && is_array($item['children']) && in_array($childName, $item['children'])) { return $item; } } return null; // 未找到返回null } // 使用示例 $parent = findParentByChild($array, 'jeff'); print_r($parent);
输出结果:
Array ( [name] => john [age] => 25 [children] => Array ( [0] => jane [1] => jeff ) )
如果需要返回父数组的索引而非数组本身,可修改函数:
function findParentIndexByChild($array, $childName) { foreach ($array as $index => $item) { if (isset($item['children']) && is_array($item['children']) && in_array($childName, $item['children'])) { return $index; } } return false; // 未找到返回false } // 使用示例 $parentIndex = findParentIndexByChild($array, 'jeff'); // 返回0
递归实现(支持深层嵌套)
如果数组存在多层嵌套(比如children里还有子数组),可以用递归函数遍历:
function findParentByChildRecursive($array, $childName) { foreach ($array as $item) { // 检查当前项的children是否包含目标值 if (isset($item['children']) && is_array($item['children'])) { if (in_array($childName, $item['children'])) { return $item; } // 递归查找深层嵌套 $result = findParentByChildRecursive($item['children'], $childName); if ($result !== null) { return $result; } } } return null; }
内容的提问来源于stack exchange,提问作者panthro
相关产品推荐
相关产品推荐

