Заказать многомерный массив PHP - PullRequest
1 голос
/ 07 апреля 2010

У меня есть проблема с упорядочением массива по полю, здесь я оставляю пример

foreach($xml as $site){
echo '<div><a href="'.$site->loc.'">'.$site->loc.'</a>' .$site->padre.'</div>';
}

Иногда поле $site->padre пустое, но я хотел бы заказать по $site->padre в алфавитном порядке Я видел пример с usort, но я не понимаю, как это работает.

Заранее спасибо.

Приветствия

Ответы [ 2 ]

3 голосов
/ 07 апреля 2010
function cmp($a, $b){
    return strcmp($a['padre'], $b['padre']);
}

usort($xml, "cmp");
foreach($xml as $site){
    echo '<div><a href="'.$site->loc.'">'.$site->loc.'</a>' .$site->padre.'</div>';
}

Функция cmp будет вызываться для каждого элемента в массиве. Функция должна возвращать целое число, чтобы определить, больше ли $ a, меньше или равно $ b. Указав ['padre'] в функции cmp, вы сравните этот элемент.

1 голос
/ 07 апреля 2010
<?php

   function alphabetize($a, $b){
     # property notation as used in original question
     return strcmp($a->padre, $b->padre);
   }

   $xml = uasort($xml, 'alphabetize');
   foreach($xml as $site){
     # your code here
   }

?>

В качестве альтернативы вы можете использовать лямбда-функцию, используя PHP create_function()

$xml = uasort($xml, create_function('$a,$b', 'return strcmp($a->padre, $b->padre);'));

Или, если у вас PHP> = 5.3

$xml = uasort($xml, function($a,$b){ return strcmp($a->padre, $b->padre); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...