【问题标题】:Sort all elements of a single associative array对单个关联数组的所有元素进行排序
【发布时间】:2020-04-12 18:32:11
【问题描述】:

假设一个具有单个元素的关联数组

 array('red'=> 3, 'blue'=> 6, 'yellow'=> 2, 'orange'=> 1)

我需要对这些键进行升序(或降序)排序,并将每个排序后的元素放入新数组中,最终得到单独的数组元素,如

myarray[] = array('orange' => 1);
myarray[] = array('yellow' => 2);
myarray[] = array('red'    => 3);
myarray[] = array('blue'   => 6);

已添加

我的第一个想法是使用 asort/ksort,但这些函数似乎需要多个数组元素。就我而言,只有一个数组元素。我需要对单个关联数组元素的内容进行排序。

【问题讨论】:

  • 那么,你有没有尝试过?

标签: php arrays sorting


【解决方案1】:

asort()arsort() 将允许您根据值对数组进行排序。如果您正在寻找一个二维数组,您可以执行以下操作:

$arr = array('red' => 3,
             'blue' => 6,
             'yellow' => 2, 
             'orange' => 1);
$my_sorted_arr = [];
asort($arr); // Use arsort($arr) for reverse (descending) order
foreach($arr AS $k => $v) {
   $my_sorted_arr[] = array($k => $v);
}

print_r($my_sorted_arr);

输出

Array
(
    [0] => Array
        (
            [orange] => 1
        )

    [1] => Array
        (
            [yellow] => 2
        )

    [2] => Array
        (
            [red] => 3
        )

    [3] => Array
        (
            [blue] => 6
        )

)

【讨论】:

    【解决方案2】:

    你不需要任何循环,你可以使用 uasort() 和 array_chunk() 来解决这个问题,所以这里是你的解决方案:

    
    // Comparison function
    function cmp($a, $b) {
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
    
    // Array to be sorted
    $array = array('red'=> 3, 'blue'=> 6, 'yellow'=> 2, 'orange'=> 1);
    
    // Sort $array
    uasort($array, 'cmp');
    
    // chunk your array and save it
    $final = array_chunk($array, 1, TRUE);
    
    // print your results
    echo print_r($final); 
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多