按一列的值对二维数组进行排序[重复]

问题描述 投票:0回答:2

我在思考如何做到这一点时遇到了一些问题。 我有一个 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 arrays sorting multidimensional-array
2个回答
3
投票

您必须为数组创建一个自定义比较函数,并将其与

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);
?>

实例

(我更改了

line_1
数字,以便排序真正执行某些操作)

在这种情况下,PHP 会为您处理类型,但您应该注意您有字符串并将它们转换为数字的事实。如果您不确定会发生什么,请将字符串转换为浮点数或整数。这很重要,因为 PHP 可以使用比较运算符按字母顺序比较字符串....因此,如果字母或逗号或其他内容有可能潜入您的数组值,那么您可以类型转换为 int (

(int) $a["line_1"]
) 或 float (
(float) $a["line_1"]
)。


3
投票

通过提供比较相应行的值的比较回调函数来使用

uasort

© www.soinside.com 2019 - 2024. All rights reserved.