记录array_multisort的理解过程

昨天,因为项目的一个二维数组排序给纠结了,今天得好好把array_multisort这个数组函数给讲解下,或是给自己记录下,以免下次又忘记了,好记性不如烂笔头嘛。


bool array_multisort  ( array &$arr  [, mixed  $arg  = SORT_ASC  [, mixed  $arg  = SORT_REGULAR  [, mixed  $...  ]]] )

从上面手册上给出来的定义可以看出,该函数在返回的是布尔值,成功返回TRUE,失败返回FALSE,因此在使用时无需再赋值给数组变量,同时数组默认的是升序排序。


例一

// 默认为第一个数组按升序排列,成功返回TRUE,失败返回FALSE
// 第一个数组排序后,对应的第二个数组对应索引的值也会排序
$arr1 = array(10, 100, 100, 0);
$arr2 = array(1, 3, 2, 4);
array_multisort($arr1, $arr2);
print_r($arr1);
print_r($arr2);

打印结果为

---------- DEBUG PHP ----------
Array
(
    [0] => 0
    [1] => 10
    [2] => 100
    [3] => 100
)
Array
(
    [0] => 4
    [1] => 1
    [2] => 2
    [3] => 3
)

输出完成 (耗时 0 秒) - 正常终止

例二

$ar = array(
       array(   1,  2, "2",   3,   1),
       array("10", 11, 100, 100, "a")
      );

// 数组单元一按字符串降序排列
// 数组单元二<span style="font-family: Arial, Helvetica, sans-serif;">(在数组单元一排序好的基础上再)</span>按数字升序排列
array_multisort($ar[0], SORT_DESC, SORT_STRING,
                $ar[1], SORT_NUMERIC,SORT_DESC);

print_r($ar);

打印

---------- DEBUG PHP ----------
Array
(
    [0] => Array
        (
            [0] => 3
            [1] => 2
            [2] => 2
            [3] => 1
            [4] => 1
        )

    [1] => Array
        (
            [0] => 100
            [1] => 100
            [2] => 11
            [3] => 10
            [4] => a
        )

)

输出完成 (耗时 0 秒) - 正常终止

例三(该例适合从数组中获取数据后排序)

$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

foreach ($data as $key => $value) {
    $volume[$key] = $value['volume'];
    $edition[$key] = $value['edition'];
}

// $volume升序排列,$edition降序排列,同时$data数组以前两个数组的键排序
array_multisort($volume, SORT_ASC, $edition, SORT_DESC, $data);

print_r($volume);
print_r($edition);
print_r($data);

打印

---------- DEBUG PHP ----------
Array
(
    [0] => 67
    [1] => 67
    [2] => 85
    [3] => 86
    [4] => 86
    [5] => 98
)
Array
(
    [0] => 7
    [1] => 2
    [2] => 6
    [3] => 6
    [4] => 1
    [5] => 2
)
Array
(
    [0] => Array
        (
            [volume] => 67
            [edition] => 2
        )

    [1] => Array
        (
            [volume] => 67
            [edition] => 7
        )

    [2] => Array
        (
            [volume] => 85
            [edition] => 6
        )

    [3] => Array
        (
            [volume] => 86
            [edition] => 1
        )

    [4] => Array
        (
            [volume] => 86
            [edition] => 6
        )

    [5] => Array
        (
            [volume] => 98
            [edition] => 2
        )

)

输出完成 (耗时 0 秒) - 正常终止


三个例子看完,关于项目中二维数组排序轻松搞定。这个函数关键是看第一个要排序的数组,因为之后要排序的数组都是以第一个数组为通用键的。



[update 2014/07/22]

今天算是彻底理解了这个多维数组排序函数,array_multisort函数执行成功后会改变要排序的数组,对于一个二维数组而言,若要针对数组内的某一单元内字段排序,首先要循环该数组,把要排序的字段循环放入一个数组,之后使用该函数进行排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值