Blogger Information
Blog 60
fans 5
comment 3
visits 65313
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP数组的定义与访问及其遍历
longlong
Original
662 people have browsed it

1. 数组的分类与访问

  • 数组分为索引数组和关联数组,其访问方式分别是通过索引值和键名,示例如下:
  1. <?php
  2. // 1. 索引数组
  3. // 索引数组的键名是数值
  4. $stu = ['张三','李四','王五','赵六'];
  5. // 格式化打印输出这个数组,可以看出,其索引为数值,默认从0开始,递增1
  6. printf('<pre>%s</pre>',print_r($stu,true));
  7. // 访问是通过索引值
  8. echo $stu[0],'<br>';
  9. echo $stu[3],'<hr>';
  10. // 2. 关联数组
  11. // 关联数组的键名是字符串,取名要做到语义化
  12. $info = [ 'id'=>1001 , 'name'=>'jack' , 'sex'=>'male' , 'score'=>90 ];
  13. // 访问是通过键名访问
  14. echo $info['id'],'<br>';
  15. echo $info['sex'],'<hr>';

  • 数组的创建
  1. <?php
  2. // 1. 索引数组的创建
  3. // 先创建一个空数组
  4. $hobby = [];
  5. // 通过追加的方式向数组中添加元素
  6. $hobby[] = 'fish';
  7. $hobby[] = 'ball';
  8. $hobby[] = 'eat';
  9. $hobby[] = 'readiong';
  10. // 格式化打印此数组
  11. printf('<pre>%s</pre>',print_r($hobby,true));
  12. // 2. 关键数组的创建
  13. $info = [];
  14. $info['name'] = 'Alice';
  15. $info['hobby'] = 'writing';
  16. $info['sex'] = 'female';
  17. $info['age'] = 25;
  18. printf('<pre>%s</pre>',print_r($info,true));
  19. // 3. 多维数组的创建
  20. // 示例:创建一个二位数组
  21. $arr = [
  22. [ 'id'=>1001 , 'name'=>'Jack' , 'hobby'=>'fish'],
  23. [ 'id'=>1002 , 'name'=>'Mike' , 'hobby'=>'watch'],
  24. [ 'id'=>1003 , 'name'=>'Lisa' , 'hobby'=>'book'],
  25. [ 'id'=>1004 , 'name'=>'Tomi' , 'hobby'=>'music']
  26. ];
  27. printf('<pre>%s</pre>',print_r($arr,true));
  28. // 访问其中的元素
  29. echo $arr[2]['name'];

2. 数组的遍历

  • 使用指针遍历,示例如下:
  1. <?php
  2. $arr = [];
  3. $arr['id'] = 1001;
  4. $arr['name'] = '老王';
  5. $arr['age'] = 58;
  6. printf('<pre>%s</pre>',print_r($arr,true));
  7. // 使用指针遍历数组
  8. // current():获得当前指针在数组中的值
  9. // key():获得当前指针在数组中的键名
  10. printf('[%s] => %s<br>',key($arr),current($arr));
  11. // next():指针下移
  12. next($arr);
  13. printf('[%s] => %s<br>',key($arr),current($arr));
  14. next($arr);
  15. printf('[%s] => %s<br>',key($arr),current($arr));
  16. // prev():指针上移
  17. prev($arr);
  18. printf('[%s] => %s<br>',key($arr),current($arr));
  19. // end():指针指向数组中的最后一个元素
  20. end($arr);
  21. printf('[%s] => %s<br>',key($arr),current($arr));
  22. // reset():复位,即指针指向数组中的第一个元素
  23. reset($arr);
  24. printf('[%s] => %s<br>',key($arr),current($arr));

  • 使用循环遍历,示例如下:
  1. <?php
  2. // 1. 使用while循环遍历
  3. $arr = [];
  4. $arr['id'] = 1001;
  5. $arr['name'] = '老王';
  6. $arr['age'] = 58;
  7. printf('<pre>%s</pre>',print_r($arr,true));
  8. while(true){
  9. printf('[%s] => %s<br>',key($arr),current($arr));
  10. if(next($arr)) continue;
  11. else break;
  12. }
  13. echo '<hr>';
  14. // 2. 使用for循环遍历
  15. reset($arr);
  16. for( $i=0 ; $i<count($arr) ; $i++ ){
  17. printf('[%s] => %s<br>',key($arr),current($arr));
  18. next($arr);
  19. }
  20. echo '<hr>';
  21. // 换一个索引数组来遍历
  22. $info = ['张三',21,'fish'];
  23. for( $i=0; $i<count($info); $i++ ){
  24. echo $info[$i].'<br>';
  25. }
  26. echo '<hr>';
  27. // 3. 使用foreach循环遍历
  28. foreach( $arr as $key => $value){
  29. echo "[$key] => $value <br>";
  30. }
  31. echo '<hr>';
  32. // 若数组中的某个元素也是一个数组,如下:对arr数组再增加一个元素
  33. $arr['hobby'] = ['fish','reading','ball'];
  34. // 先看看现在的数组
  35. printf('<pre>%s</pre><hr>',print_r($arr,true));
  36. // 现在遍历这个数组,需要判断一维数组中的元素的值是否为数组
  37. foreach( $arr as $key => $value ){
  38. echo is_array($value) ? '<pre>'.print_r($value,true).'</pre>'.'<br>' : "[$key] => $value <br>";
  39. }
  40. echo '<hr>';
  41. // 遍历二位数组
  42. $arr = [
  43. [ 'id'=>1001 , 'name'=>'Jack' , 'hobby'=>'fish'],
  44. [ 'id'=>1002 , 'name'=>'Mike' , 'hobby'=>'watch'],
  45. [ 'id'=>1003 , 'name'=>'Lisa' , 'hobby'=>'book'],
  46. [ 'id'=>1004 , 'name'=>'Tomi' , 'hobby'=>'music']
  47. ];
  48. foreach( $arr as $index => $user ){
  49. foreach( $user as $key => $value ){
  50. echo "[$key] => $value <br>";
  51. }
  52. echo '<br>';
  53. }
  54. // 简化遍历这个二维数组
  55. foreach( $arr as $value ){
  56. printf( 'id = %s, name = %s, hobby = %s <br>', $value['id'], $value['name'], $value['hobby'] );
  57. }
  58. echo '<hr>';
  59. // 4. list()
  60. list( $x , $y) = [ 100 , 200];
  61. echo $x.' '.$y.'<br>';
  62. list( 'id' => $id, 'name' => $name ) = ['id' => 1001, 'name' => 'jack'];
  63. echo $id.' '.$name.'<br>';
  64. echo '<hr>';
  65. // 使用foreach+list来遍历二维数组
  66. foreach( $arr as list( 'id' => $id, 'name' => $name, 'hobby' => $hobby ) ){
  67. printf( 'id = %s, name = %s, hobby = %s <br>', $id , $name , $hobby );
  68. }

3. 总结

  • 了解数组分为索引数组和关联数组,以及如何访问数组中的元素

  • 一维数组和多维数组如何创建以及各自如何访问

  • 利用各种循环来遍历数组,指针,while,for,foreach都可以对数组进行遍历,但是在实际开发中,foreach是用途最广的,它是不需要对指针进行复位操作的,也不需要更新循环条件,它会自动遍历。而且foreach结合list来遍历多维数组,也是非常的简便,并且foreach也能遍历对象。

Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:foreach 很方便,但是有些场景一定要合理选择历遍方式。
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post