Taapo
Taapo

Reputation: 1987

How to go a level up in an array?

I want would like to get the parent node of the array below, but I don't find a way to easily do this.

Normally for getting the id, I would do this in PHP:

echo $output['posts']['11']['id'];

But how can I get to the parent node "11" when I get the value of "id" passed from a $_GET/$_POST/$_REQUEST? (ie. $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
                        )

                )
        )

)

Upvotes: 1

Views: 2016

Answers (5)

kaupov
kaupov

Reputation: 340

Check rolfs example for array_filter at php manual http://www.php.net/manual/en/function.array-filter.php#100813

So you could do it like this

$filtered = array_filter($output, function ($element) use ($_GET["id"]) { return ($element["id"] == $_GET["id"]); } );
$parent = array_pop($filtered);

Upvotes: 0

deceze
deceze

Reputation: 522625

$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';
}

Or possibly:

$parent = current(array_filter($array['posts'], function ($i) { return $i['id'] == $_GET['id']; }))

How this should work exactly depends on your array structure though. If you have nested arrays you may need a function that does something like the above recursively.

Upvotes: 2

Tudor Constantin
Tudor Constantin

Reputation: 26871

you could try with something like:

foreach ($posts as $post){
  foreach( $items as $item){
     if ( $item['id'] == [$_GET[id] ){
       // here, the $post is referring the parent of current item
     }
  }

}

Upvotes: 1

konsolenfreddy
konsolenfreddy

Reputation: 9671

array_keys($output['posts']);

will give you all keys within the posts array, see http://php.net/manual/en/function.array-keys.php

Upvotes: 1

I don't think it is possible while an array of array is not a DOM or any tree structure. In an array you can store any reference. but you can not naturally refer to an array containing a reference.

Upvotes: 0

Related Questions