一、认识数组
传统上把数组(array)定义为一组有某种共同特性的元素,包括相似性和类型。每个元素由一个特殊的标识符来区分,称之为键(key);而每个键对应一个值(value)。
$userNames=array('李彦宏','马云','马化腾');//定义一个数组
默认情况下以数字作为索引的键名(从0开始),userNames[0]表示李彦宏
range()方法也可以定义数组
$numbers=range(1,10);
$letters=range('a','z');
$numbers=range(1,10,2);//第三个参数表示步长
二、访问数组
一般地遍历数组采用foreach循环(注意:foreach属于语法结构),数组索引数组可以用for循环遍历
for($i=0;$i<count($numbers);$i++){
echo $numbers[$i];
}
这里的count()方法是统计数组元素的个数,is_array()方法可以检测变量是否为数组,print_r()和var_dump()方法可以打印数组
foreach($numbers=>value){
echo $value;
}
三、自定义键数组(关联数组)
<?php
// 初始化关联数组
$ages=array('何健'=>92,'建行'=>91);
// 访问数组元素
$ages['何健'];
// 添加数组元素
$ages['王鹏']=95;
// 现在数组的的元素变成了三个
echo count($ages);
// 也可以直接添加数组
$prices['观陵山']=9800;
$prices['大河贝']=9900;
$prices['圣河山']=6900;
// $prices这个数组变量被自动创建出来
?>
foreach遍历关联数组
foreach($age as $key=>$value){
echo $key."=>".$value."<br/>";
}
each返回数组中当前的键/值对并将数组指针向前移动一步
<?php
$foo=array("Robert"=>"Bob","Seppo"=>"Sepi");
$bar=each($foo);
$bar2=each($foo);
print_r($bar);
print_r($bar2);
?>
list把数组中的值赋给一些变量
<?php
$color=array('red','white','blue');
list($a,$b,$c)=$color;
echo $a;
?>
注意list()无法识别字符串key
each经常和list结合使用
<?php
$ages=array('建行'=>91,'何健'=>92,'王鹏'=>95);
while (list($k,$v)=each($ages)) {
echo $k.'=>'.$v."<br/>";
}
?>
当时用each()函数时,数组将记录当前元素。如果希望在相同的脚本中两次使用该数组,就必须使用reset()将当前元素重新设置到数组开始处。
reset($ages)
确定唯一的数组元素:array_unique();删除掉数组里相同值得元素
置换数组键和值:array_flip();它会对调数组中的key和value;
<?php
$ages=array('建行'=>91,'何健'=>92,'王鹏'=>95,'马箫'=>91);
while (list($k,$v)=each($ages)) {
echo $k.'=>'.$v."<br/>";
}
print_r(array_unique($ages));//重复的元素中后面的被删掉
print_r(array_flip($ages));//重复的元素中前面的被删掉
?>
四、多维数组
<?php
// 多维数组
$products=array(
array('苹果',6,5.32),
array('橘子',3,3.1),
array('香蕉',5,4.3)
);
// 双重for循环遍历这个数组
for ($i=0; $i < count($products); $i++) {
for ($j=0; $j < count($products[$i]); $j++) {
echo $products[$i][$j].'|';
}
echo "<br/>";
}
// 将上面的数组变成关联数组
$products1=array(
array('名称'=>'苹果','数量'=>6,'价格'=>5.32),
array('名称'=>'橘子','数量'=>3,'价格'=>3.1),
array('名称'=>'香蕉','数量'=>5,'价格'=>4.3)
);
// 这种情况就不能再使用双重for循环来遍历
for ($i=0; $i < count($products1); $i++) {
foreach ($products1[$i] as $key => $value) {
echo $value.'|';
}
echo "<br/>";
}
// 或者使用each()和list()结合的方法
for ($i=0; $i < count($products1); $i++) {
while (list($k,$v)=each($products1[$i])) {
echo $v."|";
}
echo "<br/>";
}
?>
五、数组排序
对数组中的相关数据进行排序是一件非常有意义的事
1.sort()升序排序
$products=array('orange','bananer','appale');
print_r($products);
echo "<br/>";
// 使用sort()将数组按照字母升序进行排序
sort($products);//原数组排序方式改变
print_r($products);
// 使用sort()函数将数字升序排序
$prices=array(100,10,4,23,78);
sort($prices);
sort()函数的第二个参数是可选的SORT_TEGULAR(默认值)、SORT_NUMERIC或SORT_STRING,用来制定排序的类型
print_r($prices);
echo "<br/>";
sort($prices,SORT_STRING);//与默认的排序结果不一样
print_r($prices);
2.asort()对数组进行升序排序并保持索引关系
$products=array("c"=>"观陵山","a"=>"菩遥山","b"=>"大河贝");
asort($products);
print_r($products);//按键值拼音的先后顺序排序
3.ksort()按键名的升序排序
$products=array("c"=>"观陵山","a"=>"菩遥山","b"=>"大河贝");
ksort($products);//按键名排序
print_r($products);
4.反向排序:rsort()、arsort()和krsort()
5.再一些应用中,可能希望按照另一种方式对数组排序。函数shuffle()将数组的元素进行随机排序。函数array_reverse()给出一个原来数组的反向排序。
$products=array("a"=>"观陵山","b"=>"菩遥山","c"=>"大河贝","d"=>"龙生","e"=>"永乐青山");
shuffle($products);//随机排序,所以变成数字形式
print_r($products);
echo "<br/>";
$newarr=array_reverse($products);//不能改变原数组的情况
print_r($newarr);
六、数组的指针操作
// current(),next(),prev(),end()
$transport=array('foot','bike','car','plane');
$mode=current($transport);//$mode='foot'
$mode=next($transport);//$mode='bike'
$mode=current($transport);//$mode='bike'
$mode=prev($transport);//$mode='foot'
$mode=end($transport);//$mode='plane';
// each()也操作数组的指针但是与next()有所不同,前者再指针移动之前返回当前元素,而后者先将指针前移,在返回当前元素
// pos()是current()的别名数组
// reset()重置相当于指针回到最初的位置
七、统计数组个数
count()和sizeof()统计数组下标的个数,返回数值类型
array_count_values()统计数组内下标值的个数,返回的是一个数组
八、将数组转化成标量变量:extract()