如何在阵列中升级?

时间:2011-10-05 07:06:23

标签: php arrays

我想要获取下面数组的父节点,但我找不到轻松做到这一点的方法。

通常,为了获取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
                        )

                )
        )

)

5 个答案:

答案 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);