Blogger Information
Blog 63
fans 8
comment 8
visits 50116
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP大牛成长之路:数组处理
周Sir-BLOG
Original
639 people have browsed it

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. //输出:没有

总结

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

Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:所有不常用的数组函数,一定要多看看,要用到的时候能想起来有这样一个函数。
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