数组的分类
从键值关系:
关联数组:通常是指下标为字符串,并且该字符串大体可以表达出数据的含义的数组。
例:
$person = array(
“name” => “小花”,
“age”=>18,
“edu” => “大学毕业” ,
);
索引数组:
通常是指一个数组的下标是严格的从0开始的连续的数字下标——跟js数组一样。
从数组层次来分
一维数组:
就是一个数组中的每一个元素值,都是一个普通值(非数组值)
$arr1 = array(
“name” => “小花”,
“age”=>18,
“edu” => “大学毕业”
);
二维数组:
一个数组中的每一项,又是一个一维数组。
$arr1 = array(
“name” => array(‘小花’, ‘小芳’, ‘小明’, );
“age”=> array(18, 22, 19),
“edu” => array(“大学毕业”, ‘中学’, ‘小学’)
);
多维数组:
依此类推。。。
多维数组的一般语法形式:
$v1 = 数组名[下标][下标][…..]
数组指针和遍历原理
每个数组,其内部都有一个“指针”,该指针决定了该数组当前取值的时候,取到的元素。
foreach遍历过程中,都是依赖与该指针而进行的!
举例:$arr1 = array(2=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true)
指针除了负责foreach循环的位置设定之外,还有其他一些函数也依赖于该指针:
1,
v1=current(
arr1); //取得
arr1中当前指针所指向的元素的值,如果没有指向元素,则为false2,
v1 = key(
arr1);//取得
arr1中当前指针所指向的元素的下标,。。。。。false
3,
v1=next(
arr1 ); //将指针移向“下一个元素”,然后取得该下一个元素的值;
4,
v1=prev(
arr1); //将指针移向“上一个元素”,然后取得该上一个元素的值
5,
v1=reset(
arr1); //将指针移向“第一个元素”,然后取得该元素的值——数组指针初始化
6,
v1=end(
arr1); //将指针移向“最后一个元素”,然后取得该元素的值
7,
v1=each(
arr1); //取得当前元素的下标和值,然后移动指针到下一个位置。
for+next+reset遍历数组
reset( $arr1 ); //重置数组,即:数组指针初始化,这里,返回的数据被“丢弃”了。
$len = count( $arr1);
for($i = 0; $i < $len $i++){
$key = key ($arr1 ); //下标
$value = current( $arr1 ); //值
//然后这里就可以对$key 和 $value进行任何作为变量的操作
next($arr1);//这里,移动指针到下一个元素(也同时丢弃了返回值)
}
foreach 遍历细节探讨
• foreach也是正常的循环语法结构,可以有break和continue等操作。
• 遍历过程中值变量默认的传值方式是值传递。
• 遍历过程中值变量可以人为设定为引用传递:
o foreach(
arras
key => &$value){ … }
o 键变量不可以设定为引用传递
• foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作(就是指前面的指针函数),则会复制数组后在复制的数组上继续遍历循环。
• foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。