php数组元素添加到数组头部(array_unshift的用法)
使用php内置函数 array_unshift ,下面就将 array_unshift 这个函数的用法列举一下。
array_unshift
该函数的作用是在数组开头插入一个或多个元素。被加上的元素作为一个整体添加,这些添加的元素在数组中的顺序和在参数中的顺序一样。修改后的数组中所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。该函数会返回操作后数组中元素的个数。
语法:int array_unshift ( array &$array ,mixed $var [,mixed $... ] )
例如:
代码如下 | 复制代码 |
<?php $queue = array("111cn.net",".com"); array_unshift($queue,"apple","raspberry"); print_r($queue); 以上例程会输出: Array |
当然我们还可以直接使用其它的办法了,如创建一个数组重新给他赋值即可
deque,全名double-ended queue,是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双向队列(双端队列)就像是一个队列,但是你可以在任何一端添加或移除元素。双端队列(deque)是由一些项的表组成的数据结构,对该数据结构可以进行下列操作:
push(D,X) 将项X 插入到双端队列D的前端
pop(D) 从双端队列D中删除前端项并将其返回
inject(D,X) 将项X插入到双端队列D的尾端
eject(D) 从双端队列D中删除尾端项并将其返回
PHP实现代码
代码如下 | 复制代码 |
<?php class DoubleQueue { public $queue = array(); /**(尾部)入队 **/ public function addLast($value) { return array_push($this->queue,$value); } /**(尾部)出队**/ public function removeLast() { return array_pop($this->queue); } /**(头部)入队**/ public function addFirst($value) { return array_unshift($this->queue,$value); } /**(头部)出队**/ public function removeFirst() { return array_shift($this->queue); } /**清空队列**/ public function makeEmpty() { unset($this->queue); } /**获取列头**/ public function getFirst() { return reset($this->queue); } /** 获取列尾 **/ public function getLast() { return end($this->queue); } /** 获取长度 **/ public function getLength() { return count($this->queue); } } |
例子
编写支持双端队伍的例程,每种操作均花费O(1)时间
代码如下 | 复制代码 |
<?php 结果 0 |
代码如下 | 复制代码 |
<?php |
str_replace可查找替换常规字符,
preg_replace可查找替换回车换行字符(\r\n)
preg_replace常用在
代码如下 | 复制代码 |
|
内容的过滤,过滤回车换行(\r\n)等
把
代码如下 | 复制代码 |
<a href="/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html1">首页</a> <a href="/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html0" class="a1">上一页</a> |
用str_replace函数和preg_replace函数替换成
代码如下 | 复制代码 |
<a href="/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html">首页</a> <a href="/%E5%8A%A8%E4%BD%9C%E5%86%92%E9%99%A9_1.html" class="a1">上一页</a> |
例子
代码如下 | 复制代码 |
$pages = $keyword_data_db->pages; |
再看个比较例子
代码如下 | 复制代码 |
echo microtime(true)-$t, "/n"; //0.4768660068512 2.7257590293884 |
区别
区别就是str_replace被替换(查找)的内容是固定的、确定的,当然可以使用变量,但是变量也表示固定的、确定的内容,比如可以完成把所有的\n替换为<br>等场合。
而preg_replace被替换(查找)的内容是用规则来描述的,比如可以把所有的<和>之间的内容(HTML代码)替换掉。当然preg_replace也可以用来替换固定内容。
根据以上规则,所有str_replace能做的事情preg_replace都能办到,但是preg_replace的速度要慢些,使用也要复杂些,所以我们应该尽力使用str_replace。
星际的一些兵种会有不止一种状态,比如坦克可以架起来,机枪兵可以打兴奋剂,甚至还有一些被动的,比如被虫族女王喷洒绿色液体后,敌人的行动变慢。如果按照一般的思路,每次我们对一个小兵进行操作的时候,比如一辆坦克,我们都要用if判断他的状态,这样代码中会有很多的if,else或者swith。
不过我们可以发现,我们需要的是他在某个状态下的行为,如果把这些行为按照状态封装起来,就可以减少大量的判断。
待解决的问题:封装坦克的状态,让状态自己去控制行为。
思路:把状态作为属性,兵种类本身只控制状态的变化,具体的行为由状态类定义。
状态(State)模式示例:
代码如下 | 复制代码 |
<?php //坦克状态的接口 interface TankState { //坦克的攻击方法 public function attack(); } //坦克普通状态 class TankState_Tank implements TankState { //坦克的攻击方法 public function attack() { //这里简单的输出当前状态 echo "普通状态"; } } //坦克架起来的状态 class TankState_Siege implements TankState { //坦克的攻击方法 public function attack() { //这里简单的输出当前状态 echo "架起来了"; } } //坦克类 class Tank { //状态 public $state; //坦克的攻击方法 public function __construct() { //新造出来的坦克当然是普通状态 $this->state = new TankState_Tank(); } //设置状态的方法,假设参数为玩家点击的键盘 public function setState($key) { //如果按了s if($key = 's') { $this->state = new TankState_Siege(); } //如果按了t elseif($key = 't') { $this->state = new TankState_Tank(); } } //坦克的攻击方法 public function attack() { //由当前状态自己来处理攻击 $this->state->attack(); } } //新造一辆坦克 $tank = new Tank(); //假设正好有个敌人路过,坦克就以普通模式攻击了 $tank->attack(); //架起坦克 $tank->setState('s'); //坦克再次攻击,这次是架起模式 $tank->attack(); ?> |
用途总结:状态模式可以将和状态相关的行为和属性封装,除了切换状态时,其它地方就不需要大量的判断当前状态,只要调用当前状态的方法等。
实现总结:用一个接口规范状态类需要实现的方法,比如上面的TankState规定了attack()。把各个状态封装成类,将不同状态下的不同方法放入各自的状态类,比如上面的攻击方法,同时所有的状态执行接口。原来的事务类,比如上面的Tank类,只负责状态切换,一旦需要某一个方法的调用,只要交给当前状态就可以了
相关文章
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
- 本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
- 这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
- 下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <?php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
- 下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
- 如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'name'=>'mary' ), array( 'id...2014-05-31
- 在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中哦。 代码如下 复制代码 var_export($times,true);后面不加tru...2016-11-25
- 本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
- 1.前言 昨天碰到一道关于如何解决有序数组的连接问题,这是一个很常见的问题。但是这里要考虑到代码的效率问题,因为要连接的数组都是有序的,这是一个非常重要的前提条件。2.简单但效率不高的算法 我首先想到的是使用...2013-10-04
- 最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
- 今天小编就为大家分享一篇python 实现将Numpy数组保存为图像,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 下面小编就为大家带来一篇C#中添加窗口的步骤详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)
在工作中经常遇到C#数组、ArrayList、List、Dictionary存取数据,但是该选择哪种类型进行存储数据呢?很迷茫,今天小编抽空给大家整理下这方面的内容,需要的朋友参考下吧...2020-06-25