第5章 数组

一、认识数组

传统上把数组(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()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值