【问题标题】:PHP - sort arrays within assoc arrayPHP - 在 assoc 数组中对数组进行排序
【发布时间】:2014-06-04 07:43:36
【问题描述】:

我向你保证,我已经查看了许多现有的关于 PHP 排序的 SO Q,包括 this mega one

我有一个 PHP 关联数组,以字符串为键。每个值都是一个整数数组。我想按简单的升序对每个整数数组进行排序。我相信这应该很容易,并且我已经找到了足够多的例子,我认为我应该做正确的事情,但它并不完全有效,所以有一个错字或者我是个白痴什么的......

PHP:

//Each fruit corresponds to an array (series) of integers
$data = [
    'banana' => [
        1,3,2
    ],
    'orange' => [
        5,1,3
    ]
];

echo "Before sort:\n";
var_dump($data);

//For each fruit, I want to order the numbers
foreach ($data as $key => $series)
{
    //Sort array of integers
    sort($series);

    //NB I wasn't sure about value/reference details of foreach loops, so I also tried
    //retrieving a series into a variable, sorting, and then reassigning back to the same key
}

echo "\n\nAfter sort:\n";
var_dump($data);

输出:

Before sort:
array(2) {
  'banana' =>
  array(3) {
    [0] =>
    int(1)
    [1] =>
    int(3)
    [2] =>
    int(2)
  }
  'orange' =>
  array(3) {
    [0] =>
    int(5)
    [1] =>
    int(1)
    [2] =>
    int(3)
  }
}


After sort:
array(2) {
  'banana' =>
  array(3) {
    [0] =>
    int(1)
    [1] =>
    int(3)
    [2] =>
    int(2)
  }
  'orange' =>
  array(3) {
    [0] =>
    int(5)
    [1] =>
    int(1)
    [2] =>
    int(3)
  }
}

如您所见,在输出中,内部整数数组尚未排序。我究竟做错了什么? (PHP 5.5.9,Windows 7)

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    使用参考&

    foreach ($data as $key => &$series)
    {
        //Sort array of integers
        sort($series);
        // OR
        // sort($data[$key]);
    }
    

    【讨论】:

    • 啊,确实有效,快!我没有这样做,因为我发现至少有一位评论者建议反对它,一般来说,因为事情的表现“出乎意料”。现在找不到了。
    • @frumious 嗯,我不能说我听说过……也许在某些情况下。
    • 我也试过 $temp = $data[$key];排序($临时); $date[$key] = $temp - 你会期望它工作吗?它似乎没有。编辑实际上是现在,想知道我做错了什么......
    • @frumious sort($data[$key]);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多