2013-11-06 2 views
1

Я отсортировал массив товаров для путешествий по цене. Я бы хотел переместить продукты с ценой = 0 в конце списка.php: перемещение элемента с определенным значением атрибута в конце массива

Вот что я пробовал:

 for($i = 0; $i < count($mes_voyages); ++$i) { 

      if($mes_voyages[i]['prix']==0) 
      { 

       array_push($mes_voyages,$mes_voyages[i]); 
       unset($mes_voyages[i]); 

      } 

     } 
+3

Это, вероятно, псевдо-код, но в случае, если вы не знали: переменные PHP начинаются с '$'. –

+0

oops я устал;) thanx ... он работает сейчас с $ i – Matoeil

+1

Это происходит. Рад узнать, что у вас это работает :) –

ответ

3

Так что будет:

$mes_voyages = array_merge(
    array_filter($mes_voyages, function($item){ return $item['prix']!=0; }), 
    array_filter($mes_voyages, function($item){ return $item['prix']==0; }) 
); 
+0

+1 так интеллект. – ncm

2

Там очень много чистое решение:

usort($mes_voyages, function($a,$b) { 
    if ($a["prix"] === 0 && $a["prix"] != $b["prix"]) return 1; 
}); 
+2

Hm. Не уверен, что это будет делать. Функция сортировки обратного вызова должна возвращать полный набор '-1 или 0 или 1' для правильного результата. Это необходимо проверить правильно –

+0

он не работает в сочетании с моей предыдущей обработкой массивом, который равен \t Функция cmp ($ a, $ b) \t \t \t {if ($ a ["prix"] == $ b [ "prix"]) { \t \t \t \t \t возвращение 0; \t \t \t \t} \t \t \t \t возврата ($ а [ "при"] <$ б [ "при"])? -1: 1; \t \t \t} \t \t \t \t \t \t usort ($ mes_voyages, "СС"); – Matoeil

Смежные вопросы