php二维数组多元素排序小编介绍过很多了,只是今年看到这个例子有一点区别了所以小编为各位整理了一下,希望这个排序算法能够帮助到各位.
写个二维数组的多元素排序,多元素排序类似sql中的order by sort,date,下面代码考虑性能问题,只涉及2个元素进行排序.
代码区:
function multipleArraySort( $old_arr , $arr1 , $arr2 ){ //排序第一个元素 $old_arr = array_sort( $old_arr , $arr1 [0], $arr1 [1]); $temp_array = $new_temp_array = array (); foreach ( $old_arr as $k => $v ){ $key_count = count ( $old_arr )-1; //第一个元素数相等,放入临时数组 if ( $v [ $arr1 [0]] == $old_arr [ $k -1][ $arr1 [0]] || empty empty ( $temp_array )){ $temp_array [ $k ] = $v ; } if (( $v [ $arr1 [0]] != $old_arr [ $k -1][ $arr1 [0]] && ! empty empty ( $temp_array )) || $key_count == $k ){ //添加最新元素 $temp_array [ $k ] = $v ; //数组大于1时,进行排序处理 if ( count ( $temp_array )>1){ if ( $key_count != $k ){ //删除最后一个(与上一个不相等元素) unset( $temp_array [ $k ]); } //不是最后或者最后相同,进行排序 if ( $key_count != $k || $v [ $arr1 [0]] == $old_arr [ $k -1][ $arr1 [0]]){ //排序第二个元素 $temp_array = array_sort( $temp_array , $arr2 [0], $arr2 [1]); } //排序后把排序的数组,插入原数组排序前位置 $count = count ( $new_temp_array )==0 ? 0 : count ( $new_temp_array ); foreach ( $temp_array as $val_t ){ $new_temp_array [ $count ] = $val_t ; $count ++; } //写入新数组后清空原数组 $temp_array = array (); //添加最新元素 $temp_array [ $k ] = $v ; } } } return $new_temp_array ; } //根据数组元素排序 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 ); $count_s = 0; //恢复键值 foreach ( $keysvalue as $k => $v ){ $new_array [ $count_s ] = $arr [ $k ]; $count_s ++; } //phpfensi测试数据 return $new_array ; }调用方法:
$old_arr = array ( array ( 'id' =>1, 'sort' =>1, 'date' => '1405648791' ), array ( 'id' =>2, 'sort' =>1, 'date' => '1405649791' ), array ( 'id' =>3, 'sort' =>2, 'date' => '1405647791' ), ); $arr1 = array ( 'sort' , 'desc' ); $arr2 = array ( 'date' , 'desc' ); $newArr = multipleArraySort( $old_arr , $arr1 , $arr2 ); var_dump( $newArr );
查看更多关于简单php二维数组多元素排序实例的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29793