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