博客列表 >PHP大牛成长之路:数组处理

PHP大牛成长之路:数组处理

周Sir-BLOG
周Sir-BLOG原创
2020年07月15日 00:33:07638浏览

1、栈与队列

尽管在PHP中允许直接访问某个数组单元,但PHP仍提供了各种有趣的方式来处理数组。特别要说的是,某些函数使PHP数组非常容易的实现了一个栈或队列。

1.1 什么是栈

栈:后进先出(LIFO-last in first out):最后插入的元素最先出来
栈的插入操作array_push()叫做进栈,删除操作array_pop()叫做出栈。

  1. //定义一个数组
  2. $stack = [1,2,3];

1.1.1 下面的例子,效果相当于进栈:array_push()

  1. // 进栈操作:在数组尾部添加元素,返回数组新的长度
  2. echo '数组新的长度:'.array_push($stack, 4, 5, 6).'<br>';
  3. // 输出:6
  4. print_r($stack);
  5. // 打印新数组:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )

1.1.2 下面的例子,效果相当于出栈:array_pop()

  1. //出栈操作:第1次删除最后一个元素,返回最后删除元素(先进后出)
  2. echo '第1次出栈:'.array_pop($stack).'<br>';
  3. // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
  4. //第2次出栈
  5. echo '第2次出栈:'.array_pop($stack).'<br>';
  6. // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
  7. //第3次出栈
  8. echo '第3次出栈:'.array_pop($stack).'<br>';
  9. // Array ( [0] => 1 [1] => 2 [2] => 3 )
  10. //.....如果数组是空的,或者非数组,将返回 NULL。

1.2 什么是队列

先进先出(FIFO-first in first out):最先插入的元素最先出来。
在具体应用中通常用链表或者数组来实现;
队列只允许在后端进行插入操作array_unshift(),在前端进行删除操作array_shift()

  1. //定义一个数组
  2. $queue = [1,2,3];

1.2.1 下面的例子,效果相当于元素进入队列:array_unshift()

  1. // 向数组插入多个新元素。插入的值将按顺序放置到数组的开头
  2. echo array_unshift($queue,4,5,6);
  3. // 输出:6
  4. print_r($queue);
  5. // 打印新数组:Array ( [0] => 4 [1] => 5 [2] => 6 [3] => 1 [4] => 2 [5] => 3 )

1.2.2 下面的例子,效果相当于取出队列首元素:array_shift()

  1. //取出队列操作:第1次删除首元素,返回删除首元素(先进先出)
  2. echo '第1次取出队列首元素:'.array_shift($queue).'<br>';
  3. // Array ( [0] => 5 [1] => 6 [2] => 1 [3] => 2 [4] => 3 )
  4. //第2次出栈
  5. echo '第2次取出队列首元素:'.array_shift($queue).'<br>';
  6. // Array ( [0] => 6 [1] => 1 [2] => 2 [3] => 3 )
  7. //第3次出栈
  8. echo '第3次取出队列首元素::'.array_shift($queue).'<br>';
  9. // Array ( [0] => 1 [1] => 2 [2] => 3 )

1.3 队列的用途

队列可以很好地异步处理数据传送和存储,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。

2、数组的键/值操作

2.1 键操作

  1. //定义一个数组
  2. $arr = ['id'=>100,'name'=>'小明','age'=>18,'email'=>'xiaomin@php.cn'];
  • 2.1.1 方法1:通常会使用循环得到键名:
  1. //方法1:循环得到键名
  2. while ( key($arr)) {
  3. $arr_key[] = key($arr);
  4. next($arr);
  5. }
  6. print_r($arr_key);
  7. //输出: Array ( [0] => id [1] => name [2] => age [3] => email )
  • 2.1.2 使用array_keys()函数更加方便
  1. //方法2:使用 array_keys() 函数
  2. $arr_key=array_keys($arr);
  3. print_r($arr_key);
  4. //输出: Array ( [0] => id [1] => name [2] => age [3] => email )

2.2 值操作

  • 2.2.1 方法1:通常会使用循环得到所有值:
  1. //方法1:循环得到所有值
  2. foreach ($arr as $value) {
  3. $values[] = $value;
  4. }
  5. print_r($values);
  6. //输出:Array ( [0] => 100 [1] => 小明 [2] => 18 [3] => xiaomin@php.cn )
  • 2.2.2 方法2:使用array_values()函数得到所有值:

  1. //方法2:使用 array_values() 函数
  2. $values=array_values($arr);
  3. print_r($values);
  4. //输出:Array ( [0] => 100 [1] => 小明 [2] => 18 [3] => xiaomin@php.cn )

3、数组常用函数

3.1 array_key_exists()函数

  1. $arr = ['id'=>100,'name'=>'小明','age'=>18,'email'=>'xiaomin@php.cn'];
  2. echo array_key_exists('name', $arr) ? '存在' : '不存在';
  3. //输出:存在
  4. echo array_key_exists('status', $arr) ? '存在' : '不存在';
  5. //输出:不存在

3.2 返回数组中第一个元素的键名:array_key_first()函数

  1. $arr = ['id'=>100,'name'=>'小明','age'=>18,'email'=>'xiaomin@php.cn'];
  2. echo array_key_first($arr);
  3. // 输出:id

3.3 返回数组中最后一个元素的键名:array_key_last()函数

  1. $arr = ['id'=>100,'name'=>'小明','age'=>18,'email'=>'xiaomin@php.cn'];
  2. echo array_key_last($arr);
  3. // 输出:email

3.4 查找元素值对应的键名:array_search()

  1. $arr = ['id'=>100,'name'=>'小明','age'=>18,'email'=>'xiaomin@php.cn'];
  2. echo array_search('小明', $arr) ? array_search('小明', $arr) : '没找到对应键名';
  3. // 输出:name
  4. echo array_search('admin', $arr) ? array_search('admin', $arr) : '没找到对应键名';
  5. // 输出:没找到对应键名

3.5 检查数组中是否存在指定的值:in_array()

  1. $arr = ['id'=>100,'name'=>'小明','age'=>18,'email'=>'xiaomin@php.cn'];
  2. echo in_array('小明', $arr) ? '有' : '没有';
  3. //输出:有
  4. echo in_array('小花', $arr) ? '有' : '没有';
  5. //输出:没有

总结

数组函数太多了,最重要的是理解,这里仅对常用的演示,其它线下慢慢练习吧。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议