Сортировка массива в PHP по ключу - PullRequest
0 голосов
/ 11 декабря 2011

Вот мой массив, назовем его $arr

Array ( [0] => Array ( [post] => 159 [city] => Denver [country] => [state] => Colorado) 
        [1] => Array ( [post] => 165 [city] => Miami [country] => United States [state] => Florida ) 
        [2] => Array ( [post] => 172 [city] => East Rutherford [country] => United States [state] => New Jersey ) )

Я бы хотел отсортировать этот массив по ключу "город" в порядке возрастания, чтобы массив был:

Array ( [0] => Array ( [post] => 159 [city] => Denver [country] => [state] => Colorado) 
        [2] => Array ( [post] => 172 [city] => East Rutherford [country] => United States [state] => New Jersey )
        [1] => Array ( [post] => 165 [city] => Miami [country] => United States [state] => Florida ) )

Затем я хочу отсортировать массив по значениям ключей состояния в порядке возрастания, чтобы он выглядел следующим образом:

Array ( [0] => Array ( [post] => 159 [city] => Denver [country] => [state] => Colorado)
        [1] => Array ( [post] => 165 [city] => Miami [country] => United States [state] => Florida
        [2] => Array ( [post] => 172 [city] => East Rutherford [country] => United States [state] => New Jersey ) )

Ответы [ 6 ]

1 голос
/ 11 декабря 2011

Проверьте пример № 3 для array_multisort: http://www.php.net/manual/en/function.array-multisort.php

1 голос
/ 11 декабря 2011

Вам нужно использовать usort с обратным вызовом.

usort ($array, function ($a, $b) {
    return (strcmp ($a ['city'], $b ['city']));
});

анонимные функции работают только с php 5.3, поэтому, если вы используете что-то более старое, переместите обратный вызов в новую функцию:

function my_array_sort_callback($a, $b) {
    return (strcmp ($a ['city'], $b ['city']))
}

usort ($array, "my_array_sort_callback");
0 голосов
/ 11 декабря 2011

Вот решение, которое решает вашу проблему:

<?php

$arr = array(
    array("posts"=>323, "city"=>"london"),
    array("posts"=>223, "city"=>"birmingham"),
    array("posts"=>255, "city"=>"norwich"),
    array("posts"=>13, "city"=>"manchester"),
    array("posts"=>23, "city"=>"liverpool"),
);

function cmp($a, $b) 
{
        return ($a["posts"] >= $b["posts"]);
}


usort($arr, "cmp");

print_r($arr);
?>
0 голосов
/ 11 декабря 2011

Я бы сказал, что ответ в http://php.net/manual/en/function.array-multisort.php

0 голосов
/ 11 декабря 2011

попробуйте это, предположим, что если $ arr - ваш массив, чем

foreach($arr as $k=>$v):
ksort($v);
endforeach;

print_r($arr);
0 голосов
/ 11 декабря 2011

Сначала сохраните массив в переменной, затем запустите цикл

$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}

Вывод будет a = оранжевый b = банан c = яблоко d = лимон

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