PHP сортирует массивы по значению ключа - PullRequest
1 голос
/ 21 сентября 2010

Я пытаюсь отсортировать несколько массивов в числовом порядке на основе значения в их первом ключе:

$array1[0] = '1';
$array1[1] = 'content';
$array1[2] = 'more content';

$array3[0] = '3';
$array3[1] = 'content';
$array3[2] = 'more content';

$array4[0] = '4';
$array4[1] = 'content';
$array4[2] = 'more content';

$array2[0] = '2';
$array2[1] = 'content';
$array2[2] = 'more content';

$arrays = array($array1, $array3, $array4, $array2);

foreach ($arrays as $array) {

echo $array[0] . ' ' . $array[1] . ' ' . $array[2] . '<br>';

}

Для вывода массивов в последовательности '1, 3, 4, 2', мне нужно, чтобы они выводились таким образом: '1, 2, 3, 4'. Не уверен, как или даже использовать здесь функции ksort / asort / array_multisort.

Ответы [ 2 ]

2 голосов
/ 21 сентября 2010

Вам понадобится пользовательская функция сравнения, которую вы затем сможете использовать с usort или uasort:

function cmp($a, $b) {
    return intval($a[0]) - intval($b[0]);
}
usort($arrays, 'cmp');

Начиная с PHP 5.3 выможно также использовать анонимную функцию для функции сравнения:

usort($arrays, function($a, $b) { return intval($a[0]) - intval($b[0]); });

Вы также можете использовать array_multisort, создать массив ключей, которые должны бытьсначала отсортируйте и используйте его для сортировки элементов массива:

$keys = array();
foreach ($arrays as $array) $keys[] = intval($array[0]);
array_multisort($keys, $arrays);

Это предотвращает вызов функции сравнения для каждой пары значений, которые сравниваются, так как сравниваются только ключевые значения.

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

Используя usort, вы можете указать свои собственные критерии сортировки в массиве. Это идея о том, как вы могли бы достичь того, что вы просите

function cmp($a, $b)
{
  if ($a == $b) {
      return 0;
  }
  return (intval($a[0]) < intval($b[0])) ? -1 : 1;
}

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