PHP二维数组排序问题详解(数组键值排序)
根据某个键值对二维数组进行排序是个常见问题,这里总结一个函数,可同时对两个键值分别排序,当然想要更多的话就自行解决吧.
但是如果需要排序的数组是一个二维数组,需要按照数组的键值排序,如下面这个二维数组,需要按照sort键名来排序,那么array_multisort() 就无法直接实现了.
实例一,代码如下:
$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()不不能生效了,我们可以对函数进行升级一下,根据指定键值进行排序,代码如下:
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 ; }实例二,代码如下:
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'从低到高的排序.
查看更多关于PHP二维数组排序问题详解(数组键值排序) - php数组的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did31287