【问题标题】:Sort PHP array by numerical values按数值对 PHP 数组进行排序
【发布时间】:2012-09-22 21:14:39
【问题描述】:

我想对以下名称进行排序

Array ( [Jessie] => 2 [Sarah] => 3 [Simon] => 2 [John] => 2 [Kevin] => 1 [Canvasser] => 8 [canvasser] => 11 )

基于它们对应的值

我通过下面的函数打印了名字

// get canvasser individual names and count houses canvassed
    foreach ($canvassers as $key => $value) {
        // Add to the current group count if it exists
        if ( isset( $canvasser_counts[$value] ) ) {
            $canvasser_counts[$value]++;
        }
        // or initialize to 1 if it doesn't exist
        else {
            $canvasser_counts[$value] = 1;
        }
    }
    print_r($canvasser_counts);

$canvassers 只是保存所有名称,例如。

$canvassers = array('Jessie', 'Simon', 'Jessie')

任何帮助都将不胜感激,我在这方面花了很长时间,但无法正确地对数组进行排序。

【问题讨论】:

  • asort 在这里可能会有所帮助:php.net/manual/en/function.asort.php 但我不确定您想要什么顺序,也许您可​​以定义它
  • 问题是“根据与它们对应的值”进行排序,因此asort() 是正确的方法。
  • @doublesharp 如果他想在 arsort() 中“根据它们对应的值”进行排序怎么办?

标签: php arrays sorting


【解决方案1】:

您想使用asort() - http://php.net/manual/en/function.asort.php - 以升序对值进行排序,或使用arsort() - http://php.net/manual/en/function.arsort.php - 以降序排序。

鉴于此 PHP:

$vals = array("Jessie" => 2, "Sara" => 3, "Simon" => 2, "John" => 2, "Kevin" => 1, "Canvasser" => 8, "canvasser" => 11 );
print_r($vals); // current order
asort($vals); // sort array
print_r($vals); // new order

你会得到以下输出:

Array
(
    [Jessie] => 2
    [Sara] => 3
    [Simon] => 2
    [John] => 2
    [Kevin] => 1
    [Canvasser] => 8
    [canvasser] => 11
)
Array
(
    [Kevin] => 1
    [Jessie] => 2
    [John] => 2
    [Simon] => 2
    [Sara] => 3
    [Canvasser] => 8
    [canvasser] => 11
)

【讨论】:

  • 这个答案的准确性在很大程度上取决于他想要的顺序,他实际上并没有定义,所以我不确定为什么它会如此迅速地获得投票。我的意思是,很公平,他有 90% 的机会想要上升,但仍然......
  • 很公平 - 如果你想要相反,你可以使用 arsort() (php.net/manual/en/function.arsort.php) 或在排序后将数组传递给 array_reverse() - php.net/manual/en/function.array-reverse.php
  • 不要忘记 usort(),他可能也在寻找基于这些值的自定义排序。
  • 您好,非常感谢您的回复。你们俩!但是,我想按数值排序,所以在上面的示例中,“canvasser”将是第一个,“Canvasser”第二个,“Sara”第三个等等。请问你知道一种方法吗?
  • 哈,看来你是那 10%。您想按arsort() 排序以获得与上面示例相反的结果。
猜你喜欢
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多