我的数组看起来像这样:
$array = array(
53 => array(
'name' => 'category',
'subcats' => array(
42 => array(
'name' => 'subcategory',
),
152 => array(
'name' => 'subcategory',
'subcats' => array(
431 => array(
'name' => 'subsubcategory'
)
)
)
)
),
94 => array(
'name' => 'category'
),
12 => array(
'name' => 'category',
'subcats' => array(
67 => array(
'name' => 'subcategory',
),
237 => array(
'name' => 'subcategory',
),
109 => array(
'name' => 'subcategory',
),
32 => array(
'name' => 'subcategory',
)
)
);
正如您所看到的,键是数字,但这些是类别的ID,可以无限地嵌套在一起。我需要的是在这个数组中搜索特定的ID并返回它的数组及其父元素。我们可以放心地假设即使在子类别数组中密钥也不会重复 - 它们是来自MySQL AI字段的ID;
因此,搜索关键字431的预期结果将是:
array(53, 152, 431);
任何帮助都会受到赞赏,我只是无法绕过这个;)
答案 0 :(得分:1)
这有效 -
function find_id_list($array, $key){
if(in_array($key,array_keys($array))){
return Array($key);
}
foreach($array as $k=>$v){
if(in_array("subcats",array_keys($v))){
$result = find_id_list($v["subcats"], $key);
if ($result !== null){
array_unshift($result,$k);
return $result;
}
}
}
return null;
}
输出:
$val = find_id_list($array, 431);
var_dump($val);
/* OUTPUT
array
0 => int 53
1 => int 152
2 => int 431
*/
$val = find_id_list($array, 109);
var_dump($val);
/* OUTPUT
array
0 => int 12
1 => int 109
*/
$val = find_id_list($array, 0);
var_dump($val);
/* OUTPUT
null
*/
答案 1 :(得分:0)
您可以使用递归函数来解决此问题。
function searchmulti($arr, $num)
{
if (!isset($arr[$num])) {
foreach ($arr as $key => $subarr)
{
if (isset($subarr['subcats']))
{
$ret = searchmulti($subarr['subcats'], $num);
if ($ret)
{
$ret[] = $key;
return $ret;
}
}
}
} else return array($num);
return null;
}
$solution = array_reverse(searchmulti($array,431));
输出
$ solution =>阵列(53152431); 强>