PHP 数组基本概念

初学PHP的时候对数组的一些基本总结。适用于小白的快速复习


<?php 
header('content-type:text/html;charset=utf-8');

//数组概念
	PHP其实并不区分 索引数组 和 关联数组
	访问数组单元的时候 $array[0] 和 $array{0} 是一样的

	索引数组的key是整数(可以不连接)(array() =>直接转化成为 0 或者最大的 索引+1)
	关联数组的key是字符串(null直接转化成"");
	枚举数组就是把key和value都当做了value

//数组(对于数组而言,
		 $key只能是int或者string,浮点型或者布尔型会强制转换成为int,如果key相同,最后的value会覆盖之前的//所以$arr[age]是错误的,应该是$arr['age']
		$value可以是任何类型) 
	foreach 控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。 

// 数组函数非常重要!!!!
	$str2 = array(0, 1, 3, 5, 50);
	$str = array('name' =>'zhangsan' ,'2'=>3, '1'=>'3', '5'=>$str2[3] );
	print_r($str);	//Array ( [name] => zhangsan [2] => 3 [1] => 3 [5] => 5 ) 
	echo '<br />';
	print_r($str2);		//Array ( [0] => 0 [1] => 1 [2] => 3 [3] => 5 [4] => 50 )
	echo '<hr />';
//数组的增删改查
	$str[] = 'nihao'; //增加
	unset($str['name']);//删除
	$str[1] = 30;//改
	echo $str[5];//读取,即查
	print_r($str); //Array ( [2] => 3 [1] => 30 [5] => 5 [6] => nihao )
	echo '<br />';

//数组比较大小
	array_diff — 计算数组的差集
	数组运算符(+ == === != <> !==)

	$a + $b 	联合 	$a 和 $b 的联合。$b会覆盖$a中相同键值得元素 
	$a == $b 	相等 	如果 $a 和 $b 具有相同的键/值对则为 TRUE。 
	$a === $b 	全等 	如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。 
	$a != $b 	不等 	如果 $a 不等于 $b 则为 TRUE。 
	$a <> $b 	不等 	如果 $a 不等于 $b 则为 TRUE。 
	$a !== $b 	不全等 	如果 $a 不全等于 $b 则为 TRUE。 


//遍历数组
	//利用for循环结构遍历
		$arr = array(0, 1, 3, 5, 50, 6);
		for ($key=0; $key<count($arr) ; $key++) { 
			echo $arr[$key].'<br />';
		} 
			/*0
			1
			3
			5
			50
			6
			*/
	//利用foreach循环结构遍历,
		foreach ($arr as $key => $value) {
			echo $key,'~',$value.'<br />';
		}
			/*0~0
			1~1
			2~3
			3~5
			4~50
			5~6*/
		foreach ($arr as $value) {
			echo $value.'<br />';
		}
			/*0
			1
			3
			5
			50
			6*/

//利用 list() 和 each() 来遍历数组,each() 每调用一次,指针向后移动一位,list() 把数组中的值赋给变量
//http://www.cnblogs.com/ggbd-lie/p/3269192.html 详细解释
		$t1 = array('a' =>'apple', 'b'=>'bababa', 'c'=>'couuenrnt' );
		reset($t1); //必须重置,在执行完each()后,数组的指针会移动到下一个单元,如果想要遍历数组,必须要使用reset()
		while (list($key, $val) = each($t1)) {
			echo "$key => $val \n";  //必须使用"",如果使用''没有效果
		}
		echo '<br />';

//list操作  从右向左赋值 快捷地给一组变量赋值,返回值为void
//each  返回数组中当前的键和值组成的数组,键名0和key表示当前的单元的键,键名1和value表示当前单元的值。指针自动向下一个单元移动


数组指针操作
	数组尽量不要进行应用,在PHP底层分析中有一节课是讲数组引用时的怪现象
	current(array)	返回数组中当前的键/值 并且将数组指针向前移动一个单位
	reset(array) 	将数组的内部指针指向第一个单元
	end(array)		把指针指向最后一个单元
	next(array) 	指针向前移动一个单元
	prev(array)		指着 向后移动一个单元

//数组常用函数
/**
	Count()			//计算数组中的对象个数,返回值为int
	array_sum(); 	//计算数组中所有值得和
	implode();      //把数组元素组合成字符串,返回string
	addslashed();	//使用反斜线引用字符串,返回字符串

	array_key_exists()		//检查键是否在数组中,返回值为bool
	in_array()		//检查值是否存在数组中,返回值为bool

	array_change_key_case($str, CASE_UPPER / CASE_LOWER); 	 //将数组中键名全部改为大写或者小写,返回一个数组
	array_fill(5, 6,banana); 		//用banana填充6个数组,下标以5开始,返回值为array
	array_filter()	 	//使用回调函数来过滤数组中的值,详情查看手册

	array_values() 		//返回数组中所有的值,键以0,1,2,3,来表示,返回值为array
	array_keys() 	//返回数组中所有的键名,键变成值以数组形式返回

	array_push() 	//向数组的末尾加入变量,入栈,返回值为array
	array_pop()  	//将数组末尾弹出,出栈
	array_shift()	//将开头单元移除数组
	array_unshift()	//在开头数组插入单元

	Sort()  	//把数组按照值进行排序,有默认排序,原有键被删除,返回bool,可以使用foreach来展现
	Rsort() 	//逆向排序,同上
	Usort() 	//把数组按照值进行排序,规则自定义,原有键被删除,返回bool
	asort()  	//把数据按照值进行排序,但是键被保存,返回值bool
	natsort()	//把数组的值按照自然算法排序,区别于sort(),返回bool
	natcasesort()		//自然排序算法,不区分大小写,同上,
	ksort()		//把数组按照键名排序,返回值bool 主要用于关联数组

	array_merge() 		//合并数组,如果键名相同,后面值覆盖前面,如果是数字键名相同,后面值会添加而且键名改变,用 + 可避免改键名,返回值array
	array_merge_recursive()		 //主要用于二维数组的情况,键名相同,则合并数组,不会覆盖

	array_diff($t1, $t2)		//返回数组为值在$t1中出现但是$t2中没有出现的数组,键名不会改变
	array_diff_assoc()			//同上,但是键和值会同时比较,然后返回$t1中多余的
	array_intersect($t1,$t2)	//交集,返回在 $t1 和 $t2 中值同时出现的数组
	array_intersect_assoc()		//同上,但是键名和值都必须进行比较

	array_flip(); 	//数组键和值进行对调,如果有多个相同的值,只取最后一个,其余丢弃,返回值array
	array_reverse($t1 [,true])	 //将数组顺序反转,如果有true将会保留键名,返回值array //[]表示可以忽略,
	array_unique()		//去掉数组中重复的值,值保留第一个,返回值array
	
	shuffle() 	//把数据随机打乱,删除键名,重新排列
	Range(0,100,10) 	//建立一个指定范围内的数组,返回自array,从 0 到 100 按照 10 的台阶重新形成数组,即0, 10, 20, ...,70, 80, 90, 100,
	Srand($seed)		//不懂 //用seed播下随机数发生器种子,无返回值 4.2.0之后不再使用
	array_rand() 	//从数组中随机选取1个或者2个单元,如果只取一个,返回键名,如果多取几个,返回随机组成的数组	$rand_keys = array_rand($input, 2 );

	
*/

//数组指针操作 返回类型是数组中value的值,同时也包含类型
	/*
		current()	当前位置
		next() 	
		prve() 前一个
		end() 
		reset() 复位,指向第一个
		key() 获取当前的键名
	
		$transport = array('foot', 'bike', 'car', 'plane');
		$mode = current($transport); // $mode = 'foot';
		$mode = next($transport);    // $mode = 'bike';
		$mode = next($transport);    // $mode = 'car';
		$mode = prev($transport);    // $mode = 'bike';
		$mode = end($transport);     // $mode = 'plane';
		$mode = key($transport);     // $mode = '3';
		$mode = reset($transport);     // $mode = 'foot';
	*/


//小羊繁殖案例及其面试题 小羊在第1年和第3年生,第五年死,有第0年,求20年后有多少只
		$arr = array(1, 0, 0, 0, 0);
		for ($i=1; $i<=20 ; $i++) { 
			$tam = $arr[1] + $arr[3];
			array_unshift($arr, $tam);
			array_pop($arr);
		}
		echo array_sum($arr);
		print_r($arr);
		echo '<br />';


//猴子称大王游戏 n个猴子绕成圈,数到m的猴子出局,剩下最后的是大王
//假设有5只猴子,数到7的出局,问最后第几只是大王
		function king($n, $m){  	//定义函数king
		$monkey = range(1, $n); 	//创建函数指定范围内的数组
		$i = 0; 
		while (count($monkey)>1) { 		//剩余猴子必须大于只
			$i+=1;//开始进行计数
			$head = array_shift($monkey);	//将第一只猴子移出列表
			if ($i%$m != 0) {		//如果第i只猴子不是 m 的倍数,则移到数组末尾
				array_push($monkey, $head);
			}
		}
		return $monkey[0];	
		}
		echo '剩余',king(3,4),'号猴子';//剩余2号猴子
		echo '<br />';

//数组面试题
	/*
		http://www.zixue.it/forum.php?mod=viewthread&tid=160				
		http://www.zixue.it/forum.php?mod=viewthread&tid=164				
		http://www.zixue.it/forum.php?mod=viewthread&tid=225				
		http://www.zixue.it/forum.php?mod=viewthread&tid=189				
		http://www.zixue.it/forum.php?mod=viewthread&tid=133				
		http://www.zixue.it/forum.php?mod=viewthread&tid=249

	*/


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值