我想要获取下面数组的父节点,但我找不到轻松做到这一点的方法。
通常,为了获取id,我会在PHP中执行此操作:
echo $output['posts']['11']['id'];
但是当我从$ _GET / $ _ POST / $ _ REQUEST获取“id”的值时,如何进入父节点“11”? (即$ output ['posts'] ['11'] [$ _ GET [id]])
Array
(
[posts] => Array
(
[11] => Array
(
[id] => 482
[time] => 2011-10-03 11:26:36
[subject] => Test
[body] =>
[page] => Array
(
[id] => 472
[title] => News
)
[picture] => Array
(
[0] => link/32/8/482/0/picture_2.jpg
[1] => link/32/8/482/1/picture_2.jpg
[2] => link/32/8/482/2/picture_2.jpg
[3] => link/32/8/482/3/picture_2.jpg
)
)
)
)
答案 0 :(得分:2)
$parent = null;
foreach ($array['posts'] as $key => $node) {
if ($node['id'] == $_GET['id']) {
echo "found node at key $key";
$parent = $node;
break;
}
}
if (!$parent) {
echo 'no such id';
}
或者可能:
$parent = current(array_filter($array['posts'], function ($i) { return $i['id'] == $_GET['id']; }))
这应该如何工作完全取决于你的数组结构。如果您有嵌套数组,则可能需要一个递归执行类似上述操作的函数。
答案 1 :(得分:1)
array_keys($output['posts']);
将为posts数组中的所有键提供,请参阅http://php.net/manual/en/function.array-keys.php
答案 2 :(得分:1)
你可以尝试使用类似的东西:
foreach ($posts as $post){
foreach( $items as $item){
if ( $item['id'] == [$_GET[id] ){
// here, the $post is referring the parent of current item
}
}
}
答案 3 :(得分:0)
当数组数组不是DOM或任何树结构时,我认为不可能。在数组中,您可以存储任何引用。但你不能自然地引用包含引用的数组。
答案 4 :(得分:0)
在php手册http://www.php.net/manual/en/function.array-filter.php#100813
中检查array_filter的rolfs示例所以你可以这样做
$filtered = array_filter($output, function ($element) use ($_GET["id"]) { return ($element["id"] == $_GET["id"]); } );
$parent = array_pop($filtered);