gpt4 book ai didi

PHP - 递归搜索数组中的键和子键,成功时返回键['subkey]

转载 作者:可可西里 更新时间:2023-11-01 00:48:13 27 4
gpt4 key购买 nike

因此,我编写了一个函数,用于在数组中深入两层搜索键和子键对。基本上它正在寻找 key['subkey'],如果找到它,则返回 key['subkey']

我正在寻找一种以真正递归的方式执行此操作的方法,并根据需要搜索尽可能多的深度,直到它到达数组的末尾并被迫返回 false,或者找到值和返回它。

我对 PHP 完全陌生,我用 google 搜索了几个小时也没有结果。任何指向正确方向的指示都将不胜感激。

这是函数:

function searchArray($array, $key, $subkey) {
foreach ($array as $item){
if (is_array($item) && isset($item[$key]) && isset($item[$key][$subkey])){
return $item[$key][$subkey];
} else {
foreach ($item as $subitem){
if (is_array($subitem) && isset($subitem[$key]) && isset($subitem[$key][$subkey])){
return $subitem[$key][$subkey];
}
}
}
}
}

示例数组:

"locales" => array(
"America" => array(
"locations" => array(
"us" => array(
"title" => "United States",
"lang" => "en_US",
),
"gl" => array(
)
)
),
"Europe" => array(
"locations" => array(
"at" => array(
"title" => "Österreich",
"lang" => "de_DE",
),
"fr" => array(
"title" => "France",
"lang" => "fr_FR",
),
"de" => array(
"title" => "Deutschland",
"lang" => "de_DE",
),
"it" => array(
"title" => "Italy",
"lang" => "it_IT",
),
"uk" => array(
"title" => "United Kingdom",
"lang" => "en_GB",
)
)
),
"Africa" => array(
"locations" => array(
"za" => array(
"title" => "Südafrika",
"lang" => "en_ZA",
)
)
),
"Asia & Pacific" => array(
"locations" => array(
"au" => array(
"title" => "Australia",
"lang" => "en_AU",
),
"cn" => array(
"title" => "中国",
"lang" => "zh_CN",
),
"hk" => array(
"title" => "香港",
"lang" => "zh_CN",
),
"jp" => array(
"title" => "日本",
"lang" => "jp_JP",
),
"kr" => array(
"title" => "한국",
"lang" => "ko_KR",
)
)
)
)

调用 searchArray($siteOptions['locales'], 'us', 'lang') 应该返回 'en_US'

最佳答案

function walk($array, $key, $option) {
if( !is_array( $array)) {
return false;
}
foreach ($array as $k => $v) {
if($k == $key && is_array($v) && isset($v[$option])){
return $v[$option];
}
$data = walk($v, $key, $option);
if($data != false){
return $data;
}
}

return false;
}

echo walk($array, 'jp', 'lang');

关于PHP - 递归搜索数组中的键和子键,成功时返回键['subkey],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13386760/

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