【问题标题】:Trouble with sorting numberic values in multidimensional array在多维数组中对数值进行排序的问题
【发布时间】:2014-03-05 04:28:18
【问题描述】:

更新 - 我已经修复了键名。这是我的新代码。如果我注释掉前面的排序,我已经让每种排序都能正常工作。如果前一个排序运行,则以下排序将无法正常运行。为什么会发生这种情况,我该如何解决?

<?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 键的数值。我尝试将它们设为字符串、数字等。排序后的数值的输出似乎没有任何实际顺序。 这是我的数组。

$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>";
?>

【问题讨论】:

  • 你的数组键也不同 2010 pop / pop2010
  • 是的,我明白了。我已经改好了名字。

标签: php arrays sorting multidimensional-array array-multisort


【解决方案1】:

试试这个

array_multisort($key1, SORT_ASC, $key2, SORT_DESC, $arrayname);

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2012-09-04
    相关资源
    最近更新 更多