【问题标题】:arrange multidimensional array by 1 column按 1 列排列多维数组
【发布时间】:2013-09-24 14:15:36
【问题描述】:

我有 3 个包含 3 条信息的数组。在这里可能更容易向您展示:

    $dataPoints = array(
    array('1' => '33','2' => 'dave','3' => '367'),
    array('1' => '168','2' => 'susan','3' => '56788'),
    array('1' => '99','2' => 'tim','3' => '6')

foreach ($dataPoints as $key => $row) {
    $x[$key]  = $row['1'];
    $y[$key] = $row['2'];
    $z[$key] = $row['3'];   
}

$aaa = array_multisort($x, SORT_DESC, $y, SORT_ASC, $z, $dataPoints);


print_r($aaa);

我正在尝试对最低的“3”(第 3 列)值进行排序,然后输出该数组的所有 3 个答案。

因此,“6”是第 3 列中的最低值。然后输出 '99', 'tim' & '6'。

我做错了什么?

【问题讨论】:

标签: php arrays multidimensional-array


【解决方案1】:

根据The docs,array_multisort 返回 TRUE 或 FALSE。所以你的数组会直接被修改。

正确的代码是:

$dataPoints = array(
array('1' => '33','2' => 'dave','3' => '367'),
array('1' => '168','2' => 'susan','3' => '56788'),
array('1' => '99','2' => 'tim','3' => '6')
);

foreach ($dataPoints as $key => $row) {
    $x[$key]  = $row['1'];
    $y[$key] = $row['2'];
    $z[$key] = $row['3'];   
}

$aaa = array_multisort($x, SORT_DESC, $y, SORT_ASC, $z, SORT_ASC, $dataPoints);

print_r($aaa); //TRUE or FALSE
print_r($dataPoints); //The data sorted

另请注意,您是按第一列排序,然后是第二列,然后是第三列(以防平局)。如果你想先按第三列排序,你应该使用这个:

$aaa = array_multisort($z, SORT_ASC, $x, SORT_DESC, $y, SORT_ASC, $dataPoints);

【讨论】:

  • 哎呀,对不起,自制的 print_r 方法(写得更快:-D)
  • 可能很愚蠢,但是我如何只输出其中的 1 个值,或者单独输出它们,而不是在数组中?我刚得到这个: Array ( [0] => Array ( [1] => 6 [2] => 1000 [3] => 7.38 ) [1] => Array ( [1] => 10 [2] = > 300 [3] => 3.61 ) [2] => 数组 ( [1] => 14 [2] => 630 [3] => 2.58 ) )
  • Ta。也标记为已回答。
【解决方案2】:

我相信这就是您想要的,在usort 之后,$datapoints 中的第一个条目将保存您要查找的记录。当然,你可以修改usort中的函数,随意排序。

<?php
$dataPoints = array(
array('1' => '33','2' => 'dave','3' => '367'),
array('1' => '168','2' => 'susan','3' => '56788'),
array('1' => '99','2' => 'tim','3' => '6')
);

usort($dataPoints, function($a, $b){
    if ($a[3] == $b[3]) {
        return 0;
    }
    return ($a[3] < $b[3]) ? -1 : 1;
});

print_r($dataPoints[0]);

这是一个工作示例的链接http://3v4l.org/XJU9t

【讨论】:

    【解决方案3】:

    正在对单个数组($x、$y、$z)执行排序操作。如果您查看这些数组,您将看到它们已被排序。

    $aaa = true 因为这意味着array_multisort 成功。

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2022-11-25
      • 2019-07-08
      相关资源
      最近更新 更多