Şu anda kriter özel bir dizi dayalı nesneleri dizisi sıralama ediyorum. Veriler gibi görünüyor:
// Array to Sort
Object
$key = value1
Object
$key = value2
Object
$key = value3
Object
$key = value4
// Comparison Object
Sorter
$data = array('value1', 'value2', 'value4', 'value3');
Ben döngü sayısını azaltmak için çalışıyor ve bunu yapmak için daha kolay bir / daha hızlı bir yolu olması gerektiğini düşündüm ben. Ben kendilerini sıralamak için nesnelere özel değerler eklemek istediğiniz ETMEYİN. Bu temel fikir nesnelerin kendileri için hiçbir şey yapmadan, bir önceki veri setinden özel bir tür ayıklamak mümkün olmaktır.
Ben vb array_intersects, belgelerine bakarak denedim, ama ben bu işlemek için herhangi bir iyi bir yöntem bulamadı ....
İşte şu anda sahip kodu:
$children = array(
array('key' => 'value1'),
array('key' => 'value2'),
array('key' => 'value3'),
array('key' => 'value4')
);
$comparison = array('value1', 'value2', 'value4', 'value3');
$sorter = array();
// loop 1 -- create a map
foreach ($children as &$child) {
$sorter[] = array(
'sort' => array_search($child['key'], $comparison, true),
'child' => &$child
);
}
// loop 2 -- sort based upon the sort key
usort($sorter, array($this, 'compare'));
// loop 3 (ugh -- I think this can be done in 2 loops)
$output = array();
foreach ($sorter as &$item) {
$output[] = $item['child'];
}
// return
return $output;
// sort function
private function compare( Array $a, Array $b ) {
if( $a['sort'] == $b['sort'] ) { return 0 ; }
return ($a['sort'] < $b['sort']) ? -1 : 1;
}