【问题标题】:PHP array_multisort with array_column not working带有array_column的PHP array_multisort不起作用
【发布时间】:2021-07-08 21:01:14
【问题描述】:

我正在尝试按单列对多维数组进行排序。我有一个在方法中创建并作为 $GDdata 返回的数组。这是我的unsorted array displayed in a table 的 sn-p。 在这里,我选择了我希望最终数组排序的列: $GDcol = array_column($GDdata,0); 我可以成功地将选定的列打印到屏幕上,如here 所示。 然后,当我尝试使用所选列对整个多维数组进行排序时,如下所示: $GDsorted = array_multisort($GDcol,SORT_ASC,$GDdata);,当我使用排序后的数组 $GDsorted 时,打印出数组的表格不再显示。当我使用 php 5.6 时,这对我有用。现在我已经更新到 php 7.2(这就是首先创建 array_column 的原因)。我试过取出 SORT_ASC,因为它是默认的,我尝试将 array_column 和 array_multisort 组合成一个衬里,就像我在 php 5.6 中那样。我无法弄清楚为什么使用 array_multisort 后数组不会显示。我看过建议使用 usort 的帖子,但是如果可能的话,我想使用 array_multisort。如果有人需要更多信息,请告诉我。感谢您的帮助。

【问题讨论】:

  • 欢迎来到 Stack Overflow!请发帖minimal reproducible example
  • 并发布纯文本,而不是屏幕截图。
  • 对不起@Barmar,下次我会记住这些笔记,谢谢。

标签: php sorting multidimensional-array


【解决方案1】:

来自array_multisort

array_multisort ( array &$array1 , mixed $array1_sort_order = SORT_ASC , mixed $array1_sort_flags = SORT_REGULAR , mixed ...$rest ) : bool

成功返回true,失败返回false

&$array1 表示它(和其他数组)通过引用传递并在原地排序。所以使用它而不是返回:

array_multisort($GDcol, SORT_ASC, $GDdata);
print_r($GDdata);

而且你可以一行完成,不需要SORT_ASC

array_multisort(array_column($GDdata, 0), $GDdata);

两者都会对$GDcol 进行排序,然后以相同的顺序对$GDdata 进行排序。

【讨论】:

  • 感谢您的成功!它没有在我的脑海中点击它返回一个布尔值而不是排序数组。此外,我在某处读到,在一行上执行此操作会引发警告说“变量只能通过引用传递”,但这并没有为我弹出。感谢您的宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2017-06-16
相关资源
最近更新 更多