2012-04-23 4 views
1

У меня есть следующий массив:PHP пользовательский массив сортировки

$myarray = Array (
[1] => stdClass Object ( 
    [ID] => 1 
    [current] => 
) 

[2] => stdClass Object ( 
    [ID] => 2 
    [current] => 1 
) 

[3] => stdClass Object ( 
    [ID] => 3 
    [current] => 
) 

[4] => stdClass Object ( 
    [ID] => 4 
    [current] => 
) 

[5] => stdClass Object ( 
    [ID] => 5 
    [current] => 
) 
) 

А мне нужно сортировать его, имеющее значение тока как первый, и после этого все элементы, которые были первоначально после этого текущий, и элементы, которые изначально были до, были последними в массиве результатов.

Таким образом, новый массив будет выглядеть следующим образом:

Array (
[1] => stdClass Object ( 
    [ID] => 2 
    [current] => 1 
) 

[2] => stdClass Object ( 
    [ID] => 3 
    [current] => 
) 

[3] => stdClass Object ( 
    [ID] => 4 
    [current] => 
) 

[4] => stdClass Object ( 
    [ID] => 5 
    [current] => 
) 

[5] => stdClass Object ( 
    [ID] => 1 
    [current] => 
) 
) 

Это очень важно, что

ответ

0

Если вы хотите сохранить тот же порядок элемента не рассортировать массив, но не повернуть его до текущего элемента первой, например,

while($myarray[0]['current']<>1) { 
    array_push($myarray, array_shift($myarray)); 
} 
+0

Поверните вместо сортировки, никогда не найдете его heehe Спасибо большое ... Пятно на! – eduardev

4

usort() функция может представлять интерес для Вас.

usort($input,function($a,$b) {return $a['current']-$b['current'];}); 
+0

С этим решением первый элемент массива будет моим оригинальным последним. Мне нужно сохранить первоначальный заказ. Посмотрите на идентификаторы моего желаемого результата – eduardev

+0

Хм ... в этом случае вам, вероятно, следует использовать 'foreach' для поиска текущей записи, затем [' array_splice'] (http://php.net/array_splice) и ['array_unshift'] (http://php.net/array_unshift) поможет вам добраться до него. Если это слишком сложно, подумайте над переработкой того, как данные извлекаются в первую очередь. –

1

Вы можете иметь дело с функцией usort().

Вы в основном устанавливаете свою пользовательскую функцию заказа и передаете ее в usort() как второй параметр (первый - это сортируемый массив).

Внутри функции обратного вызова вы можете определить способ сортировки массива. Например

usort($array_to_sort, function($a,$b) { 
    return $a['current']-$b['current']; 
}); 
Смежные вопросы