按数字值对PHP数组进行排序

9
我想对以下名称进行排序。
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 可能会有帮助:http://php.net/manual/zh/function.asort.php 但我不确定你想要什么排序方式,也许你可以定义一下。 - Sammaye
问题是“基于相应值进行排序”,因此使用asort()是正确的方法。 - doublesharp
@doublesharp 如果他想在arsort()中按照“与它们对应的值”进行排序,该怎么办? - Sammaye
1个回答

13

您想要使用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%的可能他想要升序,但还是公平的…… - Sammaye
1
好的 - 如果你想要相反的结果,你可以使用 arsort() (http://php.net/manual/en/function.arsort.php) 或者在数组排序后将其传递给 array_reverse() - http://php.net/manual/en/function.array-reverse.php - doublesharp
不要忘记使用usort(),他可能也在寻找基于值的自定义排序。 - Sammaye
非常感谢您的回复,两位都是!但是,我想按数字值排序,因此在上面的示例中,“ canvasser”将排在第一位,“ Canvasser”排在第二位,“ Sara”排在第三位等。请问您知道如何做到这一点吗? - dev
哈,看起来你是那10%。你想通过arsort()进行排序以获得上面示例的反向结果。 - doublesharp
应该是 arsort($vals, SORT_NUMERIC);,因为它是数字。 - Déjà vu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接