php排序数组和其他操作笔记
这次真的要写完数组了,说实在的要不是赶上双节,哪有这么高的学习速度....
最后是数组排序,合并,拆分,分解数组,以及其他数组常用的函数,其实大部分语言都是这样,所谓学习大部分时候是熟悉函数....
1.获得数组逆序的语句array_reverse语句。
$a=array("1","2","3","4","5","6","7","8","9");
print_r(array_reverse($a));
注意默认不保留键值的(键保留),可以启用第三个参数,写成array_reverse($a,true)即可
2.对调键与键值的array_flip语句,例如:
$a=array("1","2","3","4","5","6","7","8","9");
print_r(array_flip($a));
初始:
Array?(?[0]?=>?1?[1]?=>?2?[2]?=>?3?[3]?=>?4?[4]?=>?5?[5]?=>?6?[6]?=>?7?[7]?=>?8?[8]?=>?9?)
对调后:
Array?(?[1]?=>?0?[2]?=>?1?[3]?=>?2?[4]?=>?3?[5]?=>?4?[6]?=>?5?[7]?=>?6?[8]?=>?7?[9]?=>?8?)?
3.按指定形式排序数组的sort语句,形式为:sort(array,sorttype)
第二个参数:
* SORT_REGULAR - 默认。以它们原来的类型进行处理(不改变类型)。
* SORT_NUMERIC - 把值作为数字来处理
* SORT_STRING - 把值作为字符串来处理
* SORT_LOCALE_STRING - 把值作为字符串来处理,基于本地设置。
一般情况下只用默认就可以处理更多介绍自己查手册
(1)数字的例子:
$a=array("25","22","23",);
sort($a);
print_r($a);
返回:
Array?(?[0]?=>?22?[1]?=>?23?[2]?=>?25?)?
(2)字符串的例子(字符串是按照头一个字母或字符的ASCII值排序的):
$a=array("tom","jim","andy");
sort($a);
print_r($a);
返回
Array?(?[0]?=>?andy?[1]?=>?jim?[2]?=>?tom?)?
(3)以上默认是不保留键的,使用asort语句。
(4)逆序排列语句为rsort,同样保留键需要使用arsort语句,用法均相同
(5)另外使用语句可以自然排序,例如a1.doc、a9.doc、a3.doc,重新排序为:a1.doc、a3.doc、a9.doc
(6)ksort语句可以按键排序,同样的使用krsort可以逆序排列。
4.自定义规则排序的usort语句,这个东西咋看好难,直接写上书上的例子并注释就可以看清楚明白了。
例如排序美式日期:
$dates?=?array('10-10-2003','2-17-2002','2-16-2003','1-01-2005','10-10-2004');
function?DateSort($a,$b){
//如果成立,什么也不执行
if($a?==?$b)return?0;
//使用explode以-为分隔拆开a与b
list($amonth,$aday,$ayear)=explode('-',$a);
list($bmonth,$bday,$byear)=explode("-",$b);
//给a与b的月份判断是否2位,如果不是通过str_pad在前面补零
$amonth?=?str_pad($amonth,2,"0",STR_PAD_LEFT);
$bmonth?=?str_pad($bmonth,2,"0",STR_PAD_LEFT);
//给a与b的日期判断是否2位,如果不是通过str_pad在前面补零
$aday?=?str_pad($aday,2,"0",STR_PAD_LEFT);
$bady?=?str_pad($bady,2,"0",STR_PAD_LEFT);
//重新为z,b组建没有-的日期例如2-17-2002,已被组建为20020217
$a?=?$ayear?.?$amonth?.?$aday;
$b?=?$byear?.?$bmonth?.?$bday;
//判断日期是否a>b,并输出1或-f,用于传递给usort
return($a?>?$b)???1?:?-1;
}
//执行usort
usort($dates,'DateSort');
//成功输出
print_r($dates);
5.合并数组array_merge语句(返回数组)关于数字键与键(具体查手册)提示:array_merge_recursive
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));
输出:
Array?(?[a]?=>?Horse?[b]?=>?Cat?[c][/c]?=>?Cow?)
6.递归追加数组array_combine语句,前一个为键后一个为值
$a1=array("a","b","c","d");
$a2=array("Cat","Dog","Horse","Cow");
print_r(array_combine($a1,$a2));
输出:
Array?(?[a]?=>?Cat?[b]?=>?Dog?[c][/c]?=>?Horse?[d]?=>?Cow?)
7.array_slice在数组中根据条件取出一段值,并返回。(自查手册)
8.array_splice在数组指定一段位置,并返回被删除的值,也可以重新替换他们(具体查手册吧)
9.求关联数组的交集:array_intersect_assoc,数组的差集:array_diff,关联数组的差集:array_diff_assoc(自查手册)
10.随机返回一个或多个键,多值的话返回的是数组,返回一个例子:
$a=array("tom"=>"21","jim"=>"22","andy"=>"25","jack"=>"33");
echo?array_rand($a);
多个
$a=array("tom"=>"21","jim"=>"22","andy"=>"25","jack"=>"33");
print_r(array_rand($a,2));
11.随机的重新排序,suffle语句
$a=array("1","2","3","4","5","6","7","8","9");
shuffle($a);
print_r($a);
结果可能是:
Array?(?[0]?=>?3?[1]?=>?8?[2]?=>?5?[3]?=>?4?[4]?=>?6?[5]?=>?9?[6]?=>?2?[7]?=>?1?[8]?=>?7?)?
12.求数组里数组值的和array_sum语句
$a=array("1","2","3","4","5","6","7","8","9");
echo?array_sum($a);
13.分解数组,把数组按序分成指定数量的数组array_chunk,返回的是多维数组,就是数组里的数组...
例子分解a,每2个值组成新的数组并成为多维数组
$a=array("1","2","3","4","5","6","7","8","9");
print_r(array_chunk($a,2));
如果最后值的个数不足就剩几个输出几个
注意默认不保留键的,可以启用第三个参数,写成array_chunk($a,2,true)即可
终于写完了,其实这么仔细看数组没什么必要的,我只是为了熟悉php的函数的使用方法才仔细分析读了一遍