Проблема с сортировкой числовых значений в многомерном массиве

Обновление - я исправил имена ключей. Вот мой новый код. Я заставил каждый сорт работать правильно, если я закомментировал предыдущий вид. Если предыдущая сортировка выполняется, следующая сортировка не будет работать должным образом. Почему это происходит и как я могу решить это?

<?php
$poptable=array(
    array('State' => 'Alabama',
    'Capital' => 'Montgomery',
    'pop2010' => 4779736,
    'poprank' => 23),

    array('State' => 'Alaska',
    'Capital' => 'Juneau',
    'pop2010' => 710231,
    'poprank' => 47),

    array('State' => 'Arizona',
    'Capital' => 'Phoenix',
    'pop2010' => 6329017,
    'poprank' => 18),

    array('State' => 'Arkansas',
    'Capital' => 'Little Rock',
    'pop2010' => 2915918,
    'poprank' => 32),

    array('State' => 'California',
    'Capital' => 'Sacramento',
    'pop2010' => 37253956,
    'poprank' => 1),

    array('State' => 'Colorado',
    'Capital' => 'Denver',
    'pop2010' => 5029196,
    'poprank' => 22),

    array('State' => 'Connecticut',
    'Capital' => 'Hartford',
    'pop2010' => 3518288,
    'poprank' => 29),

    array('State' => 'Delaware',
    'Capital' => 'Dover',
    'pop2010' => 897934,
    'poprank' => 45),

    array('State' => 'Florida',
    'Capital' => 'Tallahassee',
    'pop2010' => 18801301,
    'poprank' => "4"),

    array('State' => 'Georgia',
    'Capital' => 'Atlanta',
    'pop2010' => 9687653,
    'poprank' => 9),

    array('State' => 'Hawaii',
    'Capital' => 'Boise',
    'pop2010' => 1360301,
    'poprank' => 42));

//Read column data into rows
foreach ($poptable as $key => $row)
    {
    $state[$key] = $row['State'];
    $capital[$key] = $row['Capital'];
    $pop2010[$key] = $row['pop2010'];
    $poprank[$key] = $row['poprank'];
    }

//foreach ($poptable as $row) {
//      foreach ($row as $key => $value){
//              ${$key}[] = $value;}}

echo "<pre>";

//Sort data by state name in ascending order
array_multisort($state, SORT_ASC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";

//Sort data by capital in descending order
array_multisort($capital, SORT_DESC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";

//Sort data by population in ascending order
array_multisort($pop2010, SORT_ASC, SORT_NUMERIC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";

//Sort data by population rank in descending order
array_multisort($poprank, SORT_DESC, SORT_NUMERIC, $poptable);
//OUTPUT sorted data
print_r($poptable);

echo "</pre>";

?>

Я пытаюсь отсортировать многомерный массив. Однако array_multisort не работает так, как я думал. Я должен использовать array_multisort. Мои первые два сорта работают правильно (штат и столица). Что не сортируется должным образом, так это числовые значения для pop2010 и poprank keys. Я попытался сделать их строками, числами и т. Д. Мой вывод для отсортированных числовых значений, кажется, не в каком-либо реальном порядке. Вот мой массив.

$poptable=array(
    array('State' => 'Alabama',
    'Capital' => 'Montgomery',
    'pop2010' => 4779736,
    'poprank' => "23"),

    array('State' => 'Alaska',
    'Capital' => 'Juneau',
    'pop2010' => 710231,
    'poprank' => "47"),

    array('State' => 'Arizona',
    'Capital' => 'Phoenix',
    'pop2010' => 6329017,
    'poprank' => "18"),

    array('State' => 'Arkansas',
    'Capital' => 'Little Rock',
    'pop2010' => 2915918,
    'poprank' => "32"),

    array('State' => 'California',
    'Capital' => 'Sacramento',
    'pop2010' => 37253956,
    'poprank' => "1"),

    array('State' => 'Colorado',
    'Capital' => 'Denver',
    'pop2010' => 5029196,
    'poprank' => "22"),

    array('State' => 'Connecticut',
    'Capital' => 'Hartford',
    'pop2010' => 3518288,
    'poprank' => "29"),

    array('State' => 'Delaware',
    'Capital' => 'Dover',
    'pop2010' => 897934,
    'poprank' => "45"),

    array('State' => 'Florida',
    'Capital' => 'Tallahassee',
    'pop2010' => '18,801,301',
    'poprank' => '4'),

    array('State' => 'Georgia',
    'Capital' => 'Atlanta',
    'pop2010' => '9,687,653',
    'poprank' => '9'),

    array('State' => 'Hawaii',
    'Capital' => 'Boise',
    'pop2010' => '1,360,301',
    'poprank' => '42'));

echo "<pre>"
//Sort data by state name in ascending order
array_multisort($State, SORT_ASC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";

//Sort data by capital in descending order
array_multisort($Capital, SORT_DESC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";

//Sort data by population
array_multisort($poprank, SORT_STRING, SORT_DESC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";

echo "</pre>";
?>

1 ответ

Решение

Попробуй это

array_multisort($key1, SORT_ASC, $key2, SORT_DESC, $arrayname);
Другие вопросы по тегам