Как отсортировать массив с несколькими значениями в php - PullRequest
1 голос
/ 18 июня 2011

У меня есть этот массив значений, который я хочу отсортировать

Array(
    [0] => word1 131
    [1] => word2 3
    [2] => word3 5
    [3] => word4 4
    [4] => word5 16
    [5] => word6 29
)

Как мне отсортировать его, используя числовое значение справа, чтобы результат был таким:

Array(
    [0] => word2 3
    [1] => word4 4
    [2] => word3 5
    [3] => word5 16
    [4] => word6 29
    [5] => word1 131
)

Thx

Ответы [ 4 ]

3 голосов
/ 18 июня 2011

Вы захотите использовать usort и создать функцию обратного вызова, которая анализирует строку и сортирует данные.

function usort_callback($a, $b)
{
  $a = preg_replace('/^.+\s(\d+)$/', '$1', $a);
  $b = preg_replace('/^.+\s(\d+)$/', '$1', $b);

  return ( intval($a) < intval($b) ) ? -1 : 1;
}

usort($array, 'usort_callback');
0 голосов
/ 18 июня 2011

Вы можете использовать usort, и пользователи будут работать следующим образом:

<?php
function cmp($a, $b) {
    $a = (int)substr(strstr($a, ' '), 1); 
    $b = (int)substr(strstr($b, ' '), 1);   
    return ($a < $b) ? -1 : 1;
}

$array = array(
    'word1 131',
    'word2 3',
    'word3 5',
    'word4 4',
    'word5 16',
    'word6 29'
);

usort($array, "cmp");

foreach ($array as $key => $value) {
    echo "$key: $value\n";
}
?>
0 голосов
/ 18 июня 2011

Определите функцию сравнения и используйте usort.В вашей функции сравнения вы можете использовать str_split или pregmatch, чтобы получить интересные части строк.

0 голосов
/ 18 июня 2011

Вам нужно будет использовать explode или str_split (), чтобы выделить число справа, отсортировать с помощью array_sort () или одной из связанных функций и собрать массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...