PHP二维数组排序问题详解(数组键值排序)
根据某个键值对二维数组进行排序是个常见问题,这里总结一个函数,可同时对两个键值分别排序,当然想要更多的话就自行解决吧.
但是如果需要排序的数组是一个二维数组,需要按照数组的键值排序,如下面这个二维数组,需要按照sort键名来排序,那么array_multisort() 就无法直接实现了.
实例一,代码如下:
<?php $arr = array( array( 'sort' => 3, 'a' => 'a', 'b' => 'b' ) , array( 'sort' => 5, 'a' => 'a', 'b' => 'b' ) , array( 'sort' => 1, 'a' => 'a', 'b' => 'b' ) ); ?>
这样array_multisort()不不能生效了,我们可以对函数进行升级一下,根据指定键值进行排序,代码如下:
<?php function array_sort($arr, $key1, $sort1 = 'asc', $key2 = '', $sort2 = 'asc') { if (!is_array($arr)) { return $arr; } foreach ($arr AS $key => $row) { $temp[$key] = $row[$key1]; } $sort1 = $sort1 == 'asc' ? SORT_ASC : SORT_DESC; if (!$key2) { array_multisort($temp, $sort1, $arr); } else { foreach ($arr AS $key => $row) { $temp2[$key] = $row[$key2]; } $sort2 = $sort2 == 'asc' ? SORT_ASC : SORT_DESC; array_multisort($temp, $sort1, $temp2, $sort2, $arr); } return $arr; } ?>
实例二,代码如下:
<?php function array_sort($arr, $keys, $type = 'asc') { $keysvalue = $new_array = array(); foreach ($arr as $k => $v) { $keysvalue[$k] = $v[$keys]; } if ($type == 'asc') { asort($keysvalue); } else { arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k => $v) { $new_array[$k] = $arr[$k]; } return $new_array; } $array = array( array( 'name' => '手机', 'brand' => '诺基亚', 'price' => 1050 ) , array( 'name' => '笔记本电脑', 'brand' => 'lenovo', 'price' => 4300 ) , array( 'name' => '剃须刀', 'brand' => '飞利浦', 'price' => 3100 ) , array( 'name' => '跑步机', 'brand' => '三和松石', 'price' => 4900 ) , array( 'name' => '手表', 'brand' => '卡西欧', 'price' => 960 ) , array( 'name' => '液晶电视', 'brand' => '索尼', 'price' => 6299 ) , array( 'name' => '激光打印机', 'brand' => '惠普', 'price' => 1200 ) ); $ShoppingList = array_sort($array, 'price'); print_r($ShoppingList); ?>
面是对$array这个二维数组按照'price'从低到高的排序.
文章网址:http://www.phprm.com/shuzu/fs3772.html
随意转载^^但请附上教程地址。