我试图弄清楚如何编写一个能做两件事的函数。
我整个周末一直在寻找,而且我已经接近了,但这件事正在踢我的屁股。
这是我的阵列:
$keys = array(
'core' => array(
'key' => 'key1',
'directory' => "$core_dir/"
),
'plugins' => array(
'key' => 'key2',
'directory' => "$core_dir/plugins/"
),
'themes' => array(
'key' => 'key3',
'directory' => "$core_dir/$themes_dir/",
'theme' => array(
'theme1' => array(
'key' => 'theme_key1',
'directory' => "$core_dir/$themes_dir/theme1/"
),
'theme2' => array(
'key' => 'theme_key2',
'directory' => "$core_dir/$themes_dir/theme2/"
)
)
),
'hooks' => 'hook_key'
);
所以我搜索key1
它将返回core
数组。
如果我搜索theme_key1
,它将返回theme1
数组。
这里是我迄今为止的功能:(从分配阅读和我在网上发现的另一个功能中将它拼接在一起)。
function search_in_array($srchvalue, $array){
global $theme_key, $ext_key;
if (is_array($array) && count($array) > 0){
$foundkey = array_search($srchvalue, $array);
if ($foundkey === FALSE){
foreach ($array as $key => $value){
if (is_array($value) && count($value) > 0){
$foundkey = search_in_array($srchvalue, $value);
if ($foundkey != FALSE){
if(isset($_GET['th'])){
$theme_array = $value;
return $theme_array;
}else{
return $value;
}
}
}
}
}
else
return $foundkey;
}
}
答案 0 :(得分:1)
不要太复杂。您可以使用递归函数深入嵌套数组。
function return_array($arr, $value) {
$arr_found = array();
foreach($arr as $key => $arr_value) {
if(is_array($arr_value)) {
if(in_array($value, $arr_value)) {
return array($key => $arr_value);
}
$arr_found = return_array($arr_value, $value);
} else {
if($arr_value == $value) {
$arr_found = array($key => $arr_value);
}
}
}
return $arr_found;
}
echo "<p>" . var_dump(return_array($keys, 'key1')) . "</p>";
echo "<p>" . var_dump(return_array($keys, 'theme_key1')) . "</p>";
希望它有所帮助!
答案 1 :(得分:1)
在多维数组中搜索特定值(简单)返回
- 醇>
包含值的数组。
使用RecursiveIteratorIterator
,RecursiveArrayIterator
和iterator_to_array
函数的简短解决方案:
$search_value = 'theme_key2';
$it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($keys));
$arr = [];
foreach ($it as $v) {
if ($v == $search_value) {
$arr = iterator_to_array($it->getInnerIterator());
break;
}
}
print_r($arr);
输出将是:
Array
(
[key] => theme_key2
[directory] => <your custom variable values here -> $core_dir/$themes_dir>/theme2/
)