我的代码是从多维数组中查找具有特定字符的所有键:
<?
$array = ["farm"=>
[
"horse"=>
[
"rabbit"=>
[
"name"=> "alan",
"age"=> "21",
"size"=> "166",
"gender"=> "f"
],
]
]
];
function createList($array, $keySearch, $path=null) {
$result = [];
foreach ($array as $key => $item) {
$basePath = $path === null ? $key : $path. "/" . $key;
if (stripos($key, $keySearch) !== false)
$result[] = ['key' => $key, 'basePath' => $basePath];
if(is_array($item))
$result = array_merge($result, createList($item, $keySearch, $basePath));
}
return $result;
}
$keySearch = 'a';
$res = createList($array, $keySearch);
print_r($res);
我的输出:
Array
(
[0] => Array
(
[key] => farm
[basePath] => farm
)
[1] => Array
(
[key] => rabbit
[basePath] => farm/horse/rabbit
)
[2] => Array
(
[key] => name
[basePath] => farm/horse/rabbit/name
)
[3] => Array
(
[key] => age
[basePath] => farm/horse/rabbit/age
)
)
但我只需要钥匙,它有一把钥匙作为孩子。所以在这种情况下我的结果应该是:
Array
(
[0] => Array
(
[key] => farm
[basePath] => farm
)
[1] => Array
(
[key] => rabbit
[basePath] => farm/horse/rabbit
)
)
答案 0 :(得分:1)
可能这是您正在寻找的,请检查并告诉我。只需在if条件中使用is_array($item)
检查您的项目是否包含孩子。
只需更改功能:
function createList($array, $keySearch, $path=null) {
$result = [];
foreach ($array as $key => $item) {
$basePath = $path === null ? $key : $path. "/" . $key;
if (stripos($key, $keySearch) !== false && is_array($item)){
$result[] = ['key' => $key, 'basePath' => $basePath];
}
if(is_array($item))
$result = array_merge($result, createList($item, $keySearch, $basePath));
}
return $result;
}
答案 1 :(得分:0)
尝试将if (stripos($key, $keySearch) !== false)
更改为if (stripos($key, $keySearch) !== false && is_array($item))
答案 2 :(得分:0)
在if(is_array($item))
$basePath = $path === null ? $key : $path. "/" . $key;
$array = ["farm"=>
[
"horse"=>
[
"rabbit"=>
[
"name"=> "alan",
"age"=> "21",
"size"=> "166",
"gender"=> "f"
],
]
]
];
function createList($array, $keySearch, $path=null) {
$result = [];
foreach ($array as $key => $item) {
$basePath = $path === null ? $key : $path. "/" . $key;
if(is_array($item))
if (stripos($key, $keySearch) !== false)
$result[] = ['key' => $key, 'basePath' => $basePath];
if(is_array($item))
$result = array_merge($result, createList($item, $keySearch, $basePath));
}
return $result;
}
$keySearch = 'a';
$res = createList($array, $keySearch);
print_r($res);
这会给你
Array
(
[0] => Array
(
[key] => farm
[basePath] => farm
)
[1] => Array
(
[key] => rabbit
[basePath] => farm/horse/rabbit
)
)