Сортировать все элементы одного ассоциативного массива - PullRequest
0 голосов
/ 12 апреля 2020

Предположим, ассоциативный массив с одним элементом

 array('red'=> 3, 'blue'=> 6, 'yellow'=> 2, 'orange'=> 1)

Мне нужно отсортировать эти ключи по возрастанию (или по убыванию), и поместить каждый отсортированный элемент в новый массив wa, чтобы получить отдельные элементы массива, как в

myarray[] = array('orange' => 1);
myarray[] = array('yellow' => 2);
myarray[] = array('red'    => 3);
myarray[] = array('blue'   => 6);

Добавлено

Моей первой мыслью было использование asort / ksort, но эти функции, похоже, требуют нескольких элементов массива. В моем случае есть только один элемент массива. Мне нужно отсортировать содержимое одного элемента ассоциативного массива.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

asort() и arsort() позволят вам отсортировать массив по значениям. Если вам нужен двумерный массив, вы можете сделать следующее:

$arr = array('red' => 3,
             'blue' => 6,
             'yellow' => 2, 
             'orange' => 1);
$my_sorted_arr = [];
asort($arr); // Use arsort($arr) for reverse (descending) order
foreach($arr AS $k => $v) {
   $my_sorted_arr[] = array($k => $v);
}

print_r($my_sorted_arr);

Вывод

Array
(
    [0] => Array
        (
            [orange] => 1
        )

    [1] => Array
        (
            [yellow] => 2
        )

    [2] => Array
        (
            [red] => 3
        )

    [3] => Array
        (
            [blue] => 6
        )

)
0 голосов
/ 12 апреля 2020

вам не нужен l oop, просто вы можете использовать для этого uasort () и array_chunk (), так что вот ваше решение:


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

// Array to be sorted
$array = array('red'=> 3, 'blue'=> 6, 'yellow'=> 2, 'orange'=> 1);

// Sort $array
uasort($array, 'cmp');

// chunk your array and save it
$final = array_chunk($array, 1, TRUE);

// print your results
echo print_r($final); 

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