<?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
)