
在PHP开发中,我们经常会遇到包含多层嵌套的数组结构。例如,以下是一个典型的数组示例,其中包含多组数据,每组数据又是一个包含多个键值对的子数组:
$dataArray = [
0 => [
"data" => [
0 => ["id_data" => "P-1234", "name_data" => "data 0 warga 1"],
1 => ["id_data" => "P-1235", "name_data" => "data 0 warga 2"]
]
],
1 => [
"data" => [
0 => ["id_data" => "O-1134", "name_data" => "data 1 warga 1"],
1 => ["id_data" => "O-1135", "name_data" => "data 1 warga 2"],
2 => ["id_data" => "O-1136", "name_data" => "data 1 warga 3"],
]
]
];我们的目标是从这个 $dataArray 中查找 id_data 为 "O-1135" 的完整记录。直接遍历所有层级会使代码变得复杂且效率低下。
为了高效地在上述复杂结构中查找数据,我们可以利用PHP的内置函数array_column和array_search。
通过结合这两个函数,我们可以先将目标子数组中的特定列(例如 id_data)提取出来,然后在这个一维列中快速查找目标值。
立即学习“PHP免费学习笔记(深入)”;
下面是实现数据查找功能的PHP函数及其使用示例:
<?php
$dataArray = [
0 => [
"data" => [
0 => ["id_data" => "P-1234", "name_data" => "data 0 warga 1"],
1 => ["id_data" => "P-1235", "name_data" => "data 0 warga 2"]
]
],
1 => [
"data" => [
0 => ["id_data" => "O-1134", "name_data" => "data 1 warga 1"],
1 => ["id_data" => "O-1135", "name_data" => "data 1 warga 2"],
2 => ["id_data" => "O-1136", "name_data" => "data 1 warga 3"],
]
]
];
/**
* 在嵌套数组中查找指定键值的记录
*
* @param array $arr 待查找的数组
* @param string $findVal 目标值
* @param string $keyToSearch 目标值对应的键名,默认为'id_data'
* @return array|false 如果找到则返回对应的子数组,否则返回false
*/
function find_value_from_nested_array(array $arr, string $findVal, string $keyToSearch = 'id_data')
{
foreach ($arr as $childArr) {
// 检查 'data' 键是否存在且为数组
if (isset($childArr['data']) && is_array($childArr['data'])) {
// 提取 'data' 数组中所有元素的 'id_data' 列
$idDataColumn = array_column($childArr['data'], $keyToSearch);
// 在提取的列中查找目标值
// array_search 返回找到的键名(索引),如果未找到则返回 FALSE
$foundIndex = array_search($findVal, $idDataColumn);
// 严格检查 $foundIndex 是否不为 FALSE
if ($foundIndex !== false) {
// 如果找到,返回对应的完整子数组
return $childArr['data'][$foundIndex];
}
}
}
// 如果遍历完所有子数组都没有找到,则返回 false
return false;
}
// 示例调用
echo "查找 'O-1135':\n";
print_r(find_value_from_nested_array($dataArray, 'O-1135'));
echo "\n查找 'P-1234':\n";
print_r(find_value_from_nested_array($dataArray, 'P-1234'));
echo "\n查找 'NON-EXISTENT':\n";
print_r(find_value_from_nested_array($dataArray, 'NON-EXISTENT'));
?>通过巧妙地结合使用 array_column 和 array_search,我们可以高效且优雅地在PHP的复杂嵌套数组中查找特定数据。这种方法避免了深层嵌套循环的复杂性,提高了代码的可读性和维护性。理解并掌握这种查找策略,对于处理日常PHP开发中的数据结构操作至关重要。
以上就是PHP中复杂嵌套嵌套数组的数据查找方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号