【发布时间】:2018-06-25 14:14:09
【问题描述】:
如何使用 PHP 内置函数根据给定的匹配键获取特定的嵌套数组
场景
$id = 1035; // Searching ID
$a = [
'id'=> 291,
'children' => [
[
'id' => 1034,
'children' => [
[
'id' => 111,
'name' => 'ABC',
'figure' => '6 digits',
'children'=> []
],
[
'id' => 1035,
'lft' => 'LEFT',
'children' => [
[
'id' => 1036,
'children' => [
[
'id' => 222,
'someKey' => 'some value',
'children'=> []
]
]
],
[
'id' => 333,
'someKey' => 'some value',
'children'=> []
]
],
]
],
],
[
'id' => 1024,
'title' => 'ABC',
'children' => [
],
]
]
];
请注意,“id”和“children”键始终存在。如何获得“1035”ID的“孩子”..?
预期输出
[
[
'id' => 1036,
'children' => [
[
'id' => 222,
'someKey' => 'some value',
'children'=> []
]
],
],
[
'id' => 333,
'someKey' => 'some value',
'children'=> []
]
];
试过
function getRecursiveCategoryIds($key, $categories = []){
$return = null;
try {
array_walk_recursive($categories, function($v, $k) use ($key, &$return){
if (null != $return) {
// Run loop to get the next immediate "children" key
if ($k == 'children') { // It's not matching anymore
$return = $v;
//return false;
throw new Exception;
}
} else if($v == $key) {
// Found
$return = $v;
}
});
} catch(Exception $e) {}
return $return;
}
$d = getRecursiveCategoryIds($id, $a);
echo '<pre>D: '; print_r($d); die;
我用上面的代码试过了,但是 "if ($k == 'children') {" 不再匹配了..!
欢迎提出任何建议...(最喜欢 PHP 的内置函数!)
【问题讨论】:
-
你不能得到父母,我的意思是......你可以得到
[id: stuff],但不能得到[[id: stuff]]。可以吗? -
@PraveenKumarPurushothaman 但我想要它的全部孩子,而不仅仅是像“[id: stuff]”。谢谢。
-
好吧,看来你没听懂。我的意思是,我可以给你一个
[...]方式而不是[[...]]方式...见家长... ☺ -
@PraveenKumarPurushothaman 你能在这里分享一些代码吗!
-
你现在可以检查...
标签: php arrays multidimensional-array nested-loops