Сортировка результатов XML с помощью PHP usort + strcmp? (целые числа)

Я пытаюсь упорядочить результаты вызова AJAX на своей странице, сравнивая числовое значение одного из полей в объекте XML. По сути, это рейтинг популярности продукта, где чем выше число, тем он популярнее.

У меня это почти работает, за исключением того, что strcmp сравнивает только первую цифру, поэтому порядок сейчас примерно такой: 1, 12, 15, 19, 2, 21, 24, 3, 34, 36, 39, 5, 52, 56

Как я могу изменить этот код, чтобы числа упорядочивались от меньшего к большему, независимо от того, сколько цифр в нем?

$products = array();
foreach($xml->Products as $product) {
    $products[] = $product;
};

// Sort results based on popularity
usort ($products, function($a, $b) {
    return strcmp($a->ProductPopularity, $b->ProductPopularity);
});

Благодарю вас!


person user13286    schedule 08.07.2014    source источник


Ответы (2)


Приведите как целые числа и выполните обычное сравнение.

 usort($myArray, function($a, $b) {
      if((int)$a->ProductPopularity==(int)$b->ProductPopularity) return 0;
      return (int)$a->ProductPopularity < (int)$b->ProductPopularity?1:-1;
 });
person TheOneWhoSighs    schedule 08.07.2014

Попробуй это:

usort ($products, function($a, $b) {
    return (int)($a->ProductPopularity) - (int)($b->ProductPopularity));
});

Или вы можете поменять местами a и b, если хотите изменить сортировку.

person Daniel Williams    schedule 08.07.2014