博客列表 >数组常用api

数组常用api

P粉314265155
P粉314265155原创
2022年08月15日 19:17:32320浏览

数组api 获取键与值

  1. <?php
  2. namespace _0811;
  3. // 注意箭头函数后面有空格
  4. $stu = ['id'=> 1 , 'name'=> '小狗' , 'score' => 89];
  5. // key():键名
  6. // current() 当前值
  7. printf( '[%s] =>%s<br>',key($stu),current($stu));
  8. // printf( '[%s] =>%s<br>',key($stu),current($stu));
  9. // 数组指针后移
  10. // next($stu);
  11. // next($stu);
  12. // printf( '[%s] =>%s<br>',key($stu),current($stu));
  13. next($stu);
  14. printf('[ %s ] => %s<br>', key($stu), current($stu));
  15. next($stu);
  16. printf('[ %s ] => %s<br>', key($stu), current($stu));
  17. // next($stu);
  18. // printf('[ %s ] => %s<br>', key($stu), current($stu));
  19. // prev()指针后移
  20. prev($stu);
  21. printf('[ %s ] => %s<br>', key($stu), current($stu));
  22. //reset()指针重置 指向第一个
  23. reset($stu);
  24. printf('[ %s ] => %s<br>', key($stu), current($stu));
  25. //end()指针 指向第最后一个
  26. end($stu);
  27. printf('[ %s ] => %s<br>', key($stu), current($stu));
  28. // 自动操作
  29. // for foreach
  30. echo '<hr>';
  31. reset($stu);
  32. if (count($stu)>0){
  33. while(true){
  34. printf('[ %s ] => %s<br>', key($stu), current($stu));
  35. if(next($stu)){
  36. continue;
  37. }else{
  38. break;
  39. }
  40. }
  41. }else {
  42. echo '空';
  43. }
  44. echo '<hr>';
  45. // foreach 简化
  46. reset($stu);
  47. foreach ($stu as $key=>$value){
  48. printf('[ %s ] => %s<br>', $key, $value);
  49. }
  50. echo '<hr>';
  51. // 解构、
  52. // list( )
  53. // 索引数组解构
  54. list ($name,$price) =['手机',5000];
  55. echo $name ,',' ,$price;
  56. echo $name, $price;
  57. // 关联数组
  58. // 模板
  59. echo '<hr>';
  60. // 注意索引必须一致 ,对象可以不一样,但是建议一样
  61. list('name'=>$a, 'price'=>$b) =['name'=>'电脑','price'=> 9000];
  62. echo $a, $b;
  63. echo '<hr>';
  64. // 框架使用 extract 模板赋值 方便
  65. extract(['name'=>'相机','price'=> 19000]);
  66. echo $name, $price;
  67. echo '<hr>';
  68. // foreach + list解构
  69. // 用二维数组来模拟数据表查询结果
  70. $users = [
  71. ['id' => 5, 'name' => '小麦'],
  72. ['id' => 8, 'name' => '小狗'],
  73. ['id' => 14, 'name' => '小猫'],
  74. ];
  75. foreach($users as $uer){
  76. print_r($uer).'<br>';
  77. vprintf('id=%s,name=%s',$uer);
  78. }
  79. echo '<hr>';
  80. // list('id'=>$id, 'name'=>$name) =['id'=>'5','name'=> '小麦'];
  81. foreach($users as list('id'=>$id, 'name'=>$name)){
  82. printf('id=%s,name=%s<br>',$id,$name);
  83. }

数组api 键的查询;值的去重、求和、求积

  1. <?php
  2. namespace _0811;
  3. // 与值相关
  4. // array values () 将数组的值。组成一个新数组 键名会重置
  5. $arr = [0=>1, 5=>88, 3=>'js', 2=>'php', 6=>98];
  6. // 增删改查后 键名会乱掉
  7. printf('<pre>%s</pre>',print_r($arr,true));
  8. print_r(array_values($arr));
  9. printf('<pre>%s</pre>',print_r(array_values($arr)),true);
  10. echo '<hr>';
  11. // in_array()查询 某个元素是否在这个数组内 返回布尔值 true false
  12. echo(in_array('ph',$arr)?'找到了':'没有');
  13. echo '<hr>';
  14. // array_search() 查询 键
  15. $key = array_search('js',$arr);
  16. echo $key;
  17. echo '<hr>';
  18. // array_unique( ) 去重 后返回新数组
  19. // @ 去掉报错
  20. print_r( array_unique($arr));
  21. echo '<hr>';
  22. printf('<pre>%s</pre>',print_r(array_unique($arr)),true);
  23. echo '<hr>';
  24. // count( ) 统计当前数组数量
  25. echo count($arr);
  26. // array_count_values(),统计某个值的出现频率
  27. $arr = [0=>1, 5=>88, 3=>'js', 2=>'php', 6=>88];
  28. printf('<pre>%s</pre>', print_r(array_count_values($arr), true));
  29. echo array_sum($arr);
  30. echo '<hr>';
  31. // 计算求值操作 array_sum 字符串 不被计算在内 当数字+字符串组成 只算数组 字符串忽略
  32. $arr = [0=>1, 5=>88, 3=>'10js', 2=>'php', 6=>88];
  33. echo array_sum($arr);
  34. echo '<hr>';
  35. // 求乘积 字符串 就是解析为 0 加法 可以乘法就出错了
  36. echo array_product($arr) . '<br>';
  37. echo '<hr>';
  38. $arr = [0=>1, 5=>88, 3=>'10js', 2=>'1php', 6=>88];
  39. echo array_product($arr) . '<br>';

数组api 值的队列

  1. <?php
  2. namespace _0811;
  3. // 栈操作: 成员的增删,只允许在数组的一端进行
  4. // 本质上是增删受限的操作
  5. // push()尾部追加 pop()尾部删除 js php 前面加array_
  6. $arr = [];
  7. echo array_push($arr,10,20,30);
  8. echo '<hr>';
  9. print_r( $arr);
  10. echo '<hr>';
  11. print_r( array_push($arr,40,50,60));
  12. echo '<hr>';
  13. print_r( $arr);
  14. echo '<hr>';
  15. echo array_pop($arr);
  16. echo '<hr>';
  17. print_r( $arr);
  18. // unshift()头部追加 shift()头部删除 js php 前面加array_
  19. echo '<hr>';
  20. echo array_unshift($arr);
  21. echo '<hr>';
  22. echo array_unshift($arr,90,80);
  23. echo '<hr>';
  24. print_r( $arr);
  25. echo '<hr>';
  26. echo array_unshift($arr,70);
  27. echo '<hr>';
  28. print_r( $arr);
  29. echo '<hr>';
  30. echo array_shift($arr);
  31. echo '<hr>';
  32. print_r( $arr);
  33. echo '<hr>';
  34. // 队列:
  35. // 1. 尾部追加, 头部删除
  36. // array_push(), array_shift()
  37. echo array_push($arr,110);
  38. print_r( $arr);
  39. echo '<hr>';
  40. echo array_shift($arr);
  41. echo '<hr>';
  42. print_r( $arr);
  43. // 2. 头部追加, 尾部删除
  44. // array_unshift(), array_pop()
  45. echo '<hr>';
  46. echo array_unshift($arr,120);
  47. print_r( $arr);
  48. echo '<hr>';
  49. echo array_pop($arr);
  50. echo '<hr>';
  51. print_r( $arr);

数组api 值的排序

  1. <?php
  2. namespace _0811;
  3. $arr = [30, 4, 82, 15, 20, 'abc', 'hello', 2, 46];
  4. printf('<pre>%s</pre>', print_r($arr, true));
  5. echo '<hr>';
  6. // 排序
  7. // 1. 值排序
  8. // 升序 默认按照ASCII码 键重置
  9. sort($arr);
  10. printf('<pre>%s</pre>', print_r($arr, true));
  11. echo '<hr>';
  12. // 升序 键名不重置
  13. $arr = [30, 4, 82, 15, 20, 'abc', 'hello', 2, 46];
  14. asort($arr);
  15. printf('<pre>%s</pre>', print_r($arr, true));
  16. echo '<hr>';
  17. // 降序 键重置
  18. rsort($arr);
  19. printf('<pre>%s</pre>', print_r($arr, true));
  20. echo '<hr>';
  21. // 降序 键不重置
  22. $arr = [30, 4, 82, 15, 20, 'abc', 'hello', 2, 46];
  23. arsort($arr);
  24. printf('<pre>%s</pre>', print_r($arr, true));
  25. echo '<hr>';
  26. sort($arr);
  27. printf('<pre>%s</pre>', print_r($arr, true));
  28. echo '<hr>';
  29. // 2. 键排序
  30. // ksort($arr);
  31. // krsort($arr);
  32. ksort($arr);
  33. printf('<pre>%s</pre>', print_r($arr, true));
  34. echo '<hr>';
  35. krsort($arr);
  36. printf('<pre>%s</pre>', print_r($arr, true));
  37. echo '<hr>';
  38. // 自定义排序规则
  39. // usort() 两个值
  40. $arr = [90,33,2,184, 24, 3];
  41. usort($arr,function($a,$b){
  42. // 升序
  43. return $a -$b;
  44. });
  45. printf('<pre>%s</pre>', print_r($arr, true));
  46. $arr = [90,33,2,184, 24, 3];
  47. usort($arr,function($a,$b){
  48. // 降序
  49. return $b -$a;
  50. });
  51. printf('<pre>%s</pre>', print_r($arr, true));
  52. // 打乱
  53. // shuffle() 每次结果不一样
  54. shuffle($arr);
  55. printf('<pre>%s</pre>', print_r($arr, true));

数组api 查询替换

  1. <?php
  2. namespace _0811;
  3. // 跟js 类似 js 是传字符串 php 传数组
  4. // 查询与替换
  5. // array_slice() 取出一部分成员 支持反向取值 负号
  6. $stu = [
  7. 'id' => 101,
  8. 'name' => '无忌',
  9. 'age' => 20,
  10. 'course' => 'php',
  11. 'grade' => 80
  12. ];
  13. $res = array_slice( $stu,2,3);
  14. printf('<pre>%s</pre>', print_r($res, true));
  15. echo '<hr>';
  16. $res = array_slice($stu,-5,2);
  17. printf('<pre>%s</pre>', print_r($res, true));
  18. echo '<hr>';
  19. // array_splice(): 增删改 默认功能是: 删除
  20. $arr = [10, 28, 9, 33, 56, 21, 82, 47];
  21. printf('原始数组元素: <pre>%s</pre>', print_r($arr, true));
  22. echo '<hr>';
  23. // 默认功能是: 删除
  24. print_r(array_splice($arr ,1,3)) ;
  25. echo '<hr>';
  26. printf('删除后剩余的数组元素: <pre>%s</pre>', print_r($arr ,true));
  27. echo '<hr>';
  28. // 替换功能是:
  29. $res=array_splice($arr, 1, 2, [666,999]);
  30. printf('替换后的数组元素: <pre>%s</pre>', print_r($arr ,true));
  31. // 增加 不删除就是增加 size =0 s
  32. $res=array_splice($arr, 1, 0, [666,999]);
  33. printf('增加后的数组元素: <pre>%s</pre>', print_r($arr ,true));

数组api回调

  1. <?php
  2. namespace _0811;
  3. //数组 回调
  4. $arr = [
  5. 150,
  6. 'php',
  7. true,
  8. [4, 5, 6],
  9. (new class () {
  10. }),
  11. [],
  12. null,
  13. false,
  14. '',
  15. 0,
  16. '0'
  17. ];
  18. // array_filter(),只返回数组中为true的元素组成的数组 数组过滤器
  19. print_r(array_filter($arr)) ;
  20. echo '<hr>';
  21. $res =array_filter($arr);
  22. printf('<pre>%s</pre>',print_r($res,true) );
  23. // php自动转为false的值: null, false, 空数组, 空字符串, 0, '0'
  24. // 提示: 空对象不能转为false, 但是空数组是false
  25. echo '<hr>';
  26. $res1 =array_filter($arr,function($item){
  27. // 只返回标量/基本数据类型
  28. return is_scalar($item);
  29. });
  30. printf('<pre>%s</pre>',print_r($res1,true) );
  31. echo '<hr>';
  32. printf('<pre>%s</pre>',print_r(array_filter($res1),true) );
  33. echo '<hr>';
  34. // array_map() 对每个成员 ,做回调处理,返回新数组
  35. $arr = [
  36. 'php',
  37. [3, 4, 5],
  38. (new class () {
  39. public string $name = '电脑';
  40. public int $price = 8888;
  41. }),
  42. 15,
  43. 20
  44. ];
  45. // 拉平
  46. $res2 = array_map(function($item) {
  47. switch (gettype($item)) {
  48. case 'array':
  49. $item = implode(',', $item);
  50. break;
  51. case 'object':
  52. // get_object_var 返回对象里面的变量 属性
  53. $item = get_object_vars($item);
  54. break;
  55. }
  56. return $item;
  57. },$arr);
  58. printf('<pre>%s</pre>', print_r($res2, true));
  59. echo '<hr>';
  60. // 重复拉平
  61. $arr = [
  62. 'php',
  63. [3, 4, 5],
  64. (new class () {
  65. public string $name = '电脑';
  66. public int $price = 8888;
  67. }),
  68. 15,
  69. 20
  70. ];
  71. $res3 = array_map(function($item) {
  72. switch (gettype($item)) {
  73. case 'array':
  74. $item = implode(',', $item);
  75. break;
  76. case 'object':
  77. // get_object_var 返回对象里面的变量 属性
  78. $item = implode(',', get_object_vars($item));
  79. break;
  80. }
  81. return $item;
  82. },$arr);
  83. printf('<pre>%s</pre>', print_r($res3, true));
  84. echo '<hr>';
  85. // array_reduce(): 迭代/归并处理函数
  86. $arr = [1,2,3,4,5,6];
  87. // 求和
  88. echo array_sum($arr);
  89. echo '<hr>';
  90. // 归并求和
  91. $res4 = array_reduce($arr,function ( $acc,$cur){
  92. echo $acc , '___',$cur.'<br>';
  93. return $acc +$cur;
  94. // 从多少基础上叠加
  95. },1000);
  96. echo '<hr>';
  97. echo $res4;
  98. echo '<hr>';
  99. // array_walk(): 使用自定义函数进行回调处理,返回布尔值
  100. $res = ['id' => 10, 'name' => 'admin', 'email' => 'admin@php.cn'];
  101. // array_walk(数组, 回调,回调的第三个数组的默认值)
  102. // 主要用于数组成员 的格式化, 不受数组指针影响
  103. array_walk( $res,function ($value, $key, $color){
  104. printf('[ %s ] => <span style="color:%s">%s</span><br>', $key, $color, $value);
  105. },'green');
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议