【问题标题】:Multi Array Sort PHP多数组排序 PHP
【发布时间】:2010-09-15 16:24:50
【问题描述】:

我在思考如何做到这一点时遇到了一些问题。 我在 PHP 中有一个数组

    array(131) {
     ["BLANF     "]=>
      array(3) {
        ["line_3"]=>
        string(4) "3.92"
        ["line_1"]=>
        string(1) "6"
        ["line_2"]=>
        string(2) "14"
      }
      ["BLOOH     "]=>
      array(3) {
        ["line_3"]=>
        string(4) "2.00"
        ["line_1"]=>
        string(1) "20"
        ["line_2"]=>
        string(1) "6"
      }

}

我需要根据 line_1 的值进行排序。在 PHP 中 谢谢 扎卡里

【问题讨论】:

标签: php sorting multidimensional-array


【解决方案1】:

您必须为您的数组创建一个自定义比较函数,并将其与 uasort() 一起使用来维护数组的索引。

这里是您如何使用uasort()line_1 排序...更改为按嵌套数组中的任何其他键排序很简单。

<?php

  // The custom comparison function
function cmp($a, $b)            
{
    if ($a["line_1"] == $b["line_1"]) {
        return 0;
    }
    return ($a["line_1"] < $b["line_1"]) ? -1 : 1;
}

  // Sort the array using your custom comparison
uasort($array, 'cmp');

  // Make sure we got the right result
print_r($array);
?>

Live Example

(我更改了line_1 数字,以便排序实际上做了一些事情)

在这种情况下,PHP 将为您处理类型,但您应该注意您有字符串并将它们转换为数字的事实。如果您不确定会发生什么,请将字符串转换为浮点数或整数。这很重要,因为 PHP 可以 compare strings alphabetically with the comparison operators.... 所以,如果字母或逗号或其他东西有可能潜入您的数组值,那么您可以 type cast 转换为 int ((int) $a["line_1"]) 或 float ((float) $a["line_1"])。

【讨论】:

  • 1200 个元素不是很大,我相信 PHP 可以处理这个
  • 帮助您测试代码并弄清楚您在看什么。这很好用。谢谢
【解决方案2】:

通过提供比较适当行的值的比较回调函数来使用uasort

【讨论】:

  • 您的解决方案非常有效。
  • @Peter Ajtai:在这种特殊情况下,密钥似乎很有意义,因此需要uasort 来保存它们。
猜你喜欢
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多