PHP Сортировка многомерного массива по имени поля - PullRequest
3 голосов
/ 03 сентября 2010

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

function myCmp($a, $b)
{
    return strcmp($a["days"], $b["days"]);
}

uasort($myArray, "myCmp");

Это сортирует массивы так, как мне нужно, но в неправильном порядке. На данный момент он сортирует самые большие и самые маленькие, не используя естественный порядок. Мне нужно отсортировать наименьшее на наибольшее в естественном порядке (например, 2 предшествует 5, 12 и 24).

Ответы [ 3 ]

7 голосов
/ 03 сентября 2010

strnatcmp () ваш друг

например (с использованием php 5.3 закрытие / анонимная ):

<?php
$myArray = array( 'foo'=>array('days'=>2), 'bar'=>array('days'=>22), 'ham'=>array('days'=>5), 'egg'=>array('days'=>12) );
uasort($myArray, function($a, $b) { return strnatcmp($a["days"], $b["days"]); });

foreach($myArray as $k=>$v) {
  echo $k, '=>', $v['days'], "\n";
}

печать1010 *

foo=>2
ham=>5
egg=>12
bar=>22
1 голос
/ 03 сентября 2010

Поскольку вы хотите отсортировать в естественном порядке, вы должны , а не использовать strcmp, вы можете сделать:

function myCmp($a, $b)
{
  if ($a['days'] == $b['days']) return 0;
  return ($b['days'] > $a['days']) ? -1 : 1;
}

Вот рабочий пример .

1 голос
/ 03 сентября 2010

Вы можете просто изменить параметры strcmp:

function myCmp($a, $b)
{
  return strcmp($b["days"], $a["days"]);
}

uasort($myArray, "myCmp");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...