Getting data from one way array in reverse order

前端 未结 5 1359
無奈伤痛
無奈伤痛 2020-12-21 11:37

I have an array like a one way list:

array(
    \'data1\' => ,
    \'next\' => array(
        \'data2\' => ,
              


        
相关标签:
5条回答
  • 2020-12-21 11:42

    Use the native reverse functions, or:

    $myArray[count($myArray) - ++$index]
    
    0 讨论(0)
  • 2020-12-21 11:47

    please notice that this will not reverse the inside array.

    $arr = array(
        'data1' => 'some data',
        'next' => array(
            'data2' => 'some data',
            'next' => '..... etc to data n'
        )
    );
    $rev = array_reverse($arr);
    print_r($rev);
    
    0 讨论(0)
  • 2020-12-21 11:50

    You're not looking for the reverse of the array, but you're looking for something reverse.

    Getting a better understanding first of the kind of reverse might help you.

    You need the parent of each individual element. The parent is always the previous one if you traverse on next. So if you add the previous one as the parent, then the last element of the array is the one you're looking for.

    So sounds straight forward. The harder part is to express this with so called variable aliasing / references.

    Let's add all the parents and while traversing the array, removing the 'next' entry after referencing it:

    /* traverse the path on 'next' and keep previous to set 'parent' of current */
    $walk = &$array; // start at root node
    while ($walk) {
    
        if (isset($previous)) {
            $walk['parent'] = &$previous;
        }
    
        $previous = &$walk;
    
        $hasNext = array_key_exists('next', $walk);
        if ($hasNext) {
            $walk = &$walk['next'];
            unset($previous['next']);
        } else {
            break;
        }
    }
    unset($previous);
    

    As written the last element then would contain the array you're looking for. That last element is $walk here:

    print_r($walk);
    

    Which gives you (Demo):

    Array
    (
        [data5] => <some data5>
        [parent] => Array
            (
                [data4] => <some data4>
                [parent] => Array
                    (
                        [data3] => <some data3>
                        [parent] => Array
                            (
                                [data2] => <some data2>
                                [parent] => Array
                                    (
                                        [data1] => <some data1>
                                    )
        ...
    )
    

    Hope this is helpful and understandable.

    0 讨论(0)
  • 2020-12-21 11:51

    use array_reverse(Array); function it may help for solving question.

    0 讨论(0)
  • 2020-12-21 11:55

    how about this?

    http://php.net/manual/en/function.array-walk.php

    http://php.net/manual/en/function.array-reverse.php

    If you can tell us what you want to do, it will be easier for us to help you.

    EDIT: From your comment I believe you are lookin' for the array_reverse function.

    Here is what you're lookin for:

    PHP Need to recursively reverse an array

    0 讨论(0)
提交回复
热议问题