Correcting teacher:Guanhui
Correction status:qualified
Teacher's comments:foreach 很方便,但是有些场景一定要合理选择历遍方式。
<?php
// 1. 索引数组
// 索引数组的键名是数值
$stu = ['张三','李四','王五','赵六'];
// 格式化打印输出这个数组,可以看出,其索引为数值,默认从0开始,递增1
printf('<pre>%s</pre>',print_r($stu,true));
// 访问是通过索引值
echo $stu[0],'<br>';
echo $stu[3],'<hr>';
// 2. 关联数组
// 关联数组的键名是字符串,取名要做到语义化
$info = [ 'id'=>1001 , 'name'=>'jack' , 'sex'=>'male' , 'score'=>90 ];
// 访问是通过键名访问
echo $info['id'],'<br>';
echo $info['sex'],'<hr>';
<?php
// 1. 索引数组的创建
// 先创建一个空数组
$hobby = [];
// 通过追加的方式向数组中添加元素
$hobby[] = 'fish';
$hobby[] = 'ball';
$hobby[] = 'eat';
$hobby[] = 'readiong';
// 格式化打印此数组
printf('<pre>%s</pre>',print_r($hobby,true));
// 2. 关键数组的创建
$info = [];
$info['name'] = 'Alice';
$info['hobby'] = 'writing';
$info['sex'] = 'female';
$info['age'] = 25;
printf('<pre>%s</pre>',print_r($info,true));
// 3. 多维数组的创建
// 示例:创建一个二位数组
$arr = [
[ 'id'=>1001 , 'name'=>'Jack' , 'hobby'=>'fish'],
[ 'id'=>1002 , 'name'=>'Mike' , 'hobby'=>'watch'],
[ 'id'=>1003 , 'name'=>'Lisa' , 'hobby'=>'book'],
[ 'id'=>1004 , 'name'=>'Tomi' , 'hobby'=>'music']
];
printf('<pre>%s</pre>',print_r($arr,true));
// 访问其中的元素
echo $arr[2]['name'];
<?php
$arr = [];
$arr['id'] = 1001;
$arr['name'] = '老王';
$arr['age'] = 58;
printf('<pre>%s</pre>',print_r($arr,true));
// 使用指针遍历数组
// current():获得当前指针在数组中的值
// key():获得当前指针在数组中的键名
printf('[%s] => %s<br>',key($arr),current($arr));
// next():指针下移
next($arr);
printf('[%s] => %s<br>',key($arr),current($arr));
next($arr);
printf('[%s] => %s<br>',key($arr),current($arr));
// prev():指针上移
prev($arr);
printf('[%s] => %s<br>',key($arr),current($arr));
// end():指针指向数组中的最后一个元素
end($arr);
printf('[%s] => %s<br>',key($arr),current($arr));
// reset():复位,即指针指向数组中的第一个元素
reset($arr);
printf('[%s] => %s<br>',key($arr),current($arr));
<?php
// 1. 使用while循环遍历
$arr = [];
$arr['id'] = 1001;
$arr['name'] = '老王';
$arr['age'] = 58;
printf('<pre>%s</pre>',print_r($arr,true));
while(true){
printf('[%s] => %s<br>',key($arr),current($arr));
if(next($arr)) continue;
else break;
}
echo '<hr>';
// 2. 使用for循环遍历
reset($arr);
for( $i=0 ; $i<count($arr) ; $i++ ){
printf('[%s] => %s<br>',key($arr),current($arr));
next($arr);
}
echo '<hr>';
// 换一个索引数组来遍历
$info = ['张三',21,'fish'];
for( $i=0; $i<count($info); $i++ ){
echo $info[$i].'<br>';
}
echo '<hr>';
// 3. 使用foreach循环遍历
foreach( $arr as $key => $value){
echo "[$key] => $value <br>";
}
echo '<hr>';
// 若数组中的某个元素也是一个数组,如下:对arr数组再增加一个元素
$arr['hobby'] = ['fish','reading','ball'];
// 先看看现在的数组
printf('<pre>%s</pre><hr>',print_r($arr,true));
// 现在遍历这个数组,需要判断一维数组中的元素的值是否为数组
foreach( $arr as $key => $value ){
echo is_array($value) ? '<pre>'.print_r($value,true).'</pre>'.'<br>' : "[$key] => $value <br>";
}
echo '<hr>';
// 遍历二位数组
$arr = [
[ 'id'=>1001 , 'name'=>'Jack' , 'hobby'=>'fish'],
[ 'id'=>1002 , 'name'=>'Mike' , 'hobby'=>'watch'],
[ 'id'=>1003 , 'name'=>'Lisa' , 'hobby'=>'book'],
[ 'id'=>1004 , 'name'=>'Tomi' , 'hobby'=>'music']
];
foreach( $arr as $index => $user ){
foreach( $user as $key => $value ){
echo "[$key] => $value <br>";
}
echo '<br>';
}
// 简化遍历这个二维数组
foreach( $arr as $value ){
printf( 'id = %s, name = %s, hobby = %s <br>', $value['id'], $value['name'], $value['hobby'] );
}
echo '<hr>';
// 4. list()
list( $x , $y) = [ 100 , 200];
echo $x.' '.$y.'<br>';
list( 'id' => $id, 'name' => $name ) = ['id' => 1001, 'name' => 'jack'];
echo $id.' '.$name.'<br>';
echo '<hr>';
// 使用foreach+list来遍历二维数组
foreach( $arr as list( 'id' => $id, 'name' => $name, 'hobby' => $hobby ) ){
printf( 'id = %s, name = %s, hobby = %s <br>', $id , $name , $hobby );
}
了解数组分为索引数组和关联数组,以及如何访问数组中的元素
一维数组和多维数组如何创建以及各自如何访问
利用各种循环来遍历数组,指针,while,for,foreach都可以对数组进行遍历,但是在实际开发中,foreach是用途最广的,它是不需要对指针进行复位操作的,也不需要更新循环条件,它会自动遍历。而且foreach结合list来遍历多维数组,也是非常的简便,并且foreach也能遍历对象。