<?php $arr=[ [ 'id'=>4 ], [ 'id'=>5 ], [ 'id'=>16 ], [ 'id'=>1 ], [ 'id'=>9 ], [ 'id'=>12 ] ]; function bp($a,$b){ if($a['id']==$b['id']){ return 0; }else if($a['id']<$b['id']){ return -1; }else if($a['id']>$b['id']){ return 1; } } //对上面的数组进行排序 //uasort($arr, 'bp'); //对数组中的数据进行排序,并保持索引关系 usort($arr,'bp'); //对数组中数据进行排序,重新建立索引关系 echo "<pre>"; print_r($arr); echo "</pre>"; /* 以下三种方式都是用户自定义排序 uasort 按值进行排序 保持索引 usort 按值进行排序,不保持索引 uksort 按key进行排序,这里没有说到什么 保持索引,因为 key本身就是索引了。 sort() 函数用于对数组单元从低到高进行排序。 rsort() 函数用于对数组单元从高到低进行排序。 asort() 函数用于对数组单元从低到高进行排序并保持索引关系。 arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。 ksort() 函数用于对数组单元按照键名从低到高进行排序。 krsort() 函数用于对数组单元按照键名从高到低进行排序。 array_slice 从数组中获取一段 **/ function array_orderby() { $args = func_get_args(); $data = array_shift($args); foreach ($args as $n => $field) { if (is_string($field)) { $tmp = array(); foreach ($data as $key => $row) $tmp[$key] = $row[$field]; $args[$n] = $tmp; } } $args[] = &$data; call_user_func_array('array_multisort', $args); return array_pop($args); } $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); // Pass the array, followed by the column names and sort flags $sorted = array_orderby($data, 'volume', SORT_DESC, 'edition', SORT_ASC); print_r($sorted); $a=array(array('1'),array('2'),array('3'),array('4')); $b=array('a'=>array('2'),array('4'),array('6'),array('8'),array('9')); $c=$a+$b; //按照索引关系 ,进行组装 //$c=array_merge($a,$b); //$c=array_map("unserialize", array_unique(array_map("serialize", $c))); print_r($c); //保持key索引 $Default[0]='Select Something please'; $Data[147]='potato'; $Data[258]='banana'; $Data[54]='tomato'; $A=array_merge($Default,$Data); $B=ArrayMergeKeepKeys($Default,$Data); echo '<pre>'; print_r($A); print_r($B); echo '</pre>'; Function ArrayMergeKeepKeys() { $arg_list = func_get_args(); foreach((array)$arg_list as $arg){ foreach((array)$arg as $K => $V){ $Zoo[$K]=$V; } } return $Zoo; } //will output : /* Array ( [0] => Select Something please [1] => potato [2] => banana [3] => tomato ) Array ( [0] => Select Something please [147] => potato [258] => banana [54] => tomato )*/ $a=array('a'=>'a1','b'=>'a2','a3','a4','a5'); //$b=array(100=>'b1','b2','a'=>'b3','b4'); $b=array(100=>'b1','b2','a'=>'b3','b4'); $a+=$b; print_r($a); ?> output: Array ( [a] => a1 [b] => a2 [0] => a3 [1] => a4 [2] => a5 [100] => b1 [101] => b2 [102] => b4 ) 结果显示: 1、如果被连接的数组中没有指定key,那么就从0开始,默认向后递增。 如果被连接的数组中有指定的key,也有没有被指定的,指定的key不受影响。 如果出现有和a数组中重复的,则以a数组中的为准。 $a=array('a'=>'a1','b'=>'a2','a3','a4','a5'); $b=array('z'=>'b1','b2','a'=>'b3','b4'); Array( [a] => a1 [b] => a2 [0] => a3 [1] => a4 [2] => a5 [z] => b1 ) 如果第一个没有指定,后面的指定了,则这个后面所有未指定的索引全部依次递增。 $a=array('a'=>'a1','b'=>'a2','a3','a4','a5'); $b=array('b1',80=>'b2','a'=>'b3','b4'); Array( [a] => a1 [b] => a2 [0] => a3 [1] => a4 [2] => a5 [80] => b2 [81] => b4 )