`
bardo
  • 浏览: 378381 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11807
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:10116
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9504
社区版块
存档分类
最新评论

PHP的for循环效率问题与数组的指针循环

    博客分类:
  • PHP
阅读更多

我在《php的for循环用法详解》一文中详细讲解了for循环的使用方法。但是,并没有讲for循环与foreach循环不同的使用场景。本文给大家介绍一下,不同场景下循环控制结构的选用。
大家都了解,foreach快于for。是什么原因呢?
道理其实不复杂。for循环中多一个记数器。也就多增加运算。foreach使用的是PHP内核中的记数器,非显式记数器。所以,速度自然要快。
但我们不可能时时都用foreach,有两种情况,我们要选用for,
第一,当内部需要使用记数器变量时。我们没必要在foreach内部再加一个 $++ 这样的记数器。(当然,必须是正确的理由。不正确的理由,则要参看下方第二条)而大可以直接使用普通的for循环。
但这里有几点需要注意:
(1)不要在检验分句中使用函数,即:
for($i=0;$i<count($array);$i++)
这会大大降低效率。正确的做法是:
for($i=0,$j=count($array);$i<$j;$i++)
(2)不要用另一变量初始化(这当然与效率无关),但程序与代码会因此简化
即:如果写 for($i=$k;$i<$j;$i++)
不如直接写成:for(;$k<$j;$k++)
看得出来,上面代码已足够了。没必要多一次赋值。
第二、foreach并不移动数组的指针。有时我们需要使用指针式操作。
如果不用数组指针式操作,在
for($i=0,$j=count($array);$i<$j;$i++)
内部肯定还有 $++, 或 $--
如果出现这样的代码,foreach也不能代用。因为,foreach并不移动数组的指针!
这时,我们就可以考虑使用指针循环。这样效率一样也高。因为,以数组的指针代替PHP代码的记数器,效率样很高。
循环格式如下:
for(reset($array);$catlog=current($array);next($array))
为什么要这样呢?
因为:假如你下面的代码是:
$out=$catlog . '=' . next($array);
我想,你看出其中的方便之处了吧?
或许,在这个循环内部,你还可以:
for(;$item=current($array);next($array)){
 $outItem= $item . '=>' .  next($array);
}
如果不用数组的指针循环,那么,这样的嵌套结构中,则需要多个记数器。不仅是效率问题,同时代码实现的方便性也是问题。

2
0
分享到:
评论

相关推荐

    PHP数组的指针.doc

    有几个专门用于管理数组指针的内置函数: 1. `key()`:这个函数返回当前元素的键(如果数组是关联数组的话)或索引(如果数组是数字索引数组)。在指针位于数组末尾时,`key()`将返回NULL。 2. `current()`:它返回...

    PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)

    本文将汇总PHP中遍历数组的三种主要方法以及介绍几个数组指针操作函数。 首先,我们来看一下PHP中数组遍历的三个方法: 1. **foreach()**: `foreach` 是最常用且最简洁的遍历数组的方式,适用于各种类型的数组。...

    php数组指针操作详解

    - `Prev()`:与`Next()`相反,它将数组指针向前移动一位,如果成功移动则返回当前元素的值,如果没有更多元素则返回null。 - `End()`:将数组指针移动到数组的最后一个元素,返回最后一个元素的值。 - `Reset()`:将...

    PHP中使用数组指针函数操作数组示例

    在PHP编程语言中,数组是一种重要的数据结构,用于存储一系列有序的数据。数组的内部指针是数组内部的一个机制,它始终指向数组...因此,熟悉并掌握这些PHP数组指针函数及其用法对于任何PHP开发者来说都是非常重要的。

    简单了解PHP编程中数组的指针的使用

    对被赋值数组而言,它不仅获得了赋值数组的值,而且其数组指针也会指向与赋值数组指针相同的元素。 例如,考虑以下代码段: ```php $arr = array('var1'=&gt;1,'var2'=&gt;2,'var3'=&gt;3,'var4'=&gt;4,'var5'=&gt;5); while(list...

    php each 返回数组中当前的键值对并将数组指针向前移动一步实例

    在实际编程中,`each()`函数经常与`while`或`for`循环结合使用,以便按顺序访问数组中的每一个元素。需要注意的是,如果在遍历过程中还需要重新开始遍历,可以调用`reset()`函数将数组指针返回到数组的第一个元素。 ...

    约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数

    3. 在循环内部使用嵌套的for循环,循环变量为从1到m,每次循环将数组的内部指针向前移动m-1次,这样数组内部指针会指向第m个元素。 4. 如果数组内部指针指向的元素是最后一个元素,或者内部指针已经移动到数组末尾...

    php代码-数组的循环输出

    // 重置数组指针到第一个元素 while ($element = each($array)) { echo key($element) . ': ' . current($element) . "\n"; } ``` 4. **foreach** 与 **key()** 和 **current()** 结合:这可以同时获取元素的...

    第五章 php数组操作

    each()函数在数组操作中也非常有用,它返回数组中的当前键值对,并将数组指针向前移动一步。each()对于遍历数组非常有帮助,特别是在需要逐个处理数组元素时。 ```php $ages = array('Jack' =&gt; 23, 'Lucy' =&gt; 25); ...

    PHP数组详解.pdf

    1. `for`循环:适用于索引数组。 2. `foreach`循环:既能遍历索引数组,也能遍历关联数组。 - 一维数组遍历有两种语法格式。 - 多维数组遍历则需要嵌套使用。 3. 联合使用`list()`、`each()`和`while`循环:适合...

    PHP—循环.docx

    它可以将当前元素的值赋给一个变量,同时移动数组指针到下一个元素。以下是使用foreach的一个例子: ```php &lt;?php $arr = array("one", "two", "three"); foreach ($arr as $value) { echo "VALUE: " . $value . ...

    3个PHP多维数组转为一维数组的方法实例

    这种方法与foreach类似,但处理过程有所不同,它使用了数组的指针来遍历数组。 在这三种方法中,递归函数的设计是关键。无论是使用哪种循环结构,我们通常都会设计一个递归函数,通过递归遍历多维数组的每个元素,...

    php 数组的指针操作实现代码

    除了基本的指针操作外,PHP还提供了其他一些与数组相关的内建函数来管理数组,比如: - `array_values()` 函数用于获取数组的所有值,返回一个索引数组。 - `array_keys()` 函数用来获取数组的所有键名,返回一个...

    数组与数据结构

    - `for` 循环可以直接通过索引访问数组的每个元素。这种方法适用于索引数组。 - 示例: ```php $arr = array(1, 3, "for" =&gt; 4, 5, 6, 7, 8, 9, 10 =&gt; "aa", "bb", "cc"); for ($i = 0; $i ($arr); $i++) { ...

    PHP数组遍历方法小结

    **解析**:通过嵌套的 `for` 循环来遍历二维数组。外层循环负责遍历数组的行,内层循环负责遍历每一行中的元素。这种方式适用于需要控制循环次数或进行更复杂操作的场景。 **2. 使用 `foreach` 遍历** - **示例**...

    php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值

    在PHP中,数组指针是一个内部机制,用于追踪当前操作的数组元素。当你创建数组并对其元素进行操作时,PHP会自动设置并维护一个内部指针。通常情况下,开发者不需要直接操作这个指针,但在某些情况下,比如手动遍历...

    PHP基于二分法实现数组查找功能示例【循环与递归算法】

    本文提供了多个参考链接,如《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》等,...

Global site tag (gtag.js) - Google Analytics