Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 排序递归数组迭代器_Php_Iterator_Spl - Fatal编程技术网

Php 排序递归数组迭代器

Php 排序递归数组迭代器,php,iterator,spl,Php,Iterator,Spl,我有以下代码: $itemA = array( 'token' => "SOME_TOKEN", 'default' => "DEFAULT A", 'order' => 5 ); $itemB = array( 'token' => "SOME__OTHER_TOKEN", 'default' => "DEFAULT B", 'order' => 2 ); $co

我有以下代码:

$itemA = array(
        'token' => "SOME_TOKEN",
        'default' => "DEFAULT A",
        'order' => 5
);
$itemB = array(
        'token' => "SOME__OTHER_TOKEN",
        'default' => "DEFAULT B",
        'order' => 2
);
$collection = new \RecursiveArrayIterator(array($itemA, $itemB));
$collection->uasort(function( $a, $b ) {
        if ($a['order'] === $b['order']) {
                return 0;
        }
        return ($a['order'] < $b['order']) ? -1 : 1;
});
我的php版本是5.3.10,以防万一。
Gist带有。

看起来
uasort
会影响迭代器的内部
当前
指针,因此在循环之前需要
$collection->rewind()
。更妙的是,不要使用
while(valid)
,而是使用
foreach
,它会自动为您倒带:

$collection = new \RecursiveArrayIterator(...);
$collection->uasort(function( $a, $b ) {
    return $a['order'] - $b['order'];
});

foreach($collection as $item)
    print_r($item); // all fine

在这里工作。请演示如何迭代集合。(顺便说一句,您的比较函数可以是
返回$a['order']-$b['order'];
)@georg,谢谢您的提示。@georg,添加了迭代代码。但实际上,简单地称之为电流就足够了。我为更多细节创建了一个要点:
$collection = new \RecursiveArrayIterator(...);
$collection->uasort(function( $a, $b ) {
    return $a['order'] - $b['order'];
});

foreach($collection as $item)
    print_r($item); // all fine