浅谈PHP中foreach/in_array的使用

 更新时间:2015年11月02日 08:56:11   投稿:hebedich  
本文给大家简单总结了一下PHP中foreach以及in_array的使用,包括在使用中常遇到的问题等信息,非常的实用,有需要的小伙伴可以参考下。

php在开发效率很高,这是无可厚非的,但是却是在牺牲执行效率的。php数组功能非常强大,但是也要多加考虑,多试几种情况情况,以防万一,这里,我就简单的说两个遇到的坑,以后如果有发现更多的,再补上吧!

  foreach 提供了遍历数组的简单方式,可以很方便的读取到数据或对象的内容,但是官方文档说了,由于 foreach 依赖内部数组指针,在循环中修改其值将可能导致意外的行为。所以,基本上,
1、不要想在循环内部修改里面的值,否则结果将超出你想要的;
2、使用'&'是一个安全的方式,虽然很少用到,但是在用到时,在引用结束后,应立即调用unset函数销毁该变量,否则,在接下来的代码里,如果有再次使用到此变量,那么循环的最后一次值就将被修改了,从而得到了意外的值,比如:在列表循环输出时,最后一行输出将会出现许多乱七八糟的值或者空值。使用unset可解决此问题。

我们来看个示例

<?php 
/*-------------------------------------------------------------------------*/ 
/* foreach example 1: value only */ 
echo "foreach example 1: value only ".'<br />'; 
$a = array(1, 2, 3, 17); 
foreach ($a as $v) { 
echo "Current value of ".$a.":". $v."<br />"; 
} 
?> 
// 运行结果 
foreach example 1: value only 
Current value of $a: 1 
Current value of $a: 2 
Current value of $a: 3 
Current value of $a: 17 

  in_array,其含义是检查前一个字符串是否存在于后一个数组当中,而且大多数情况下,它也是这么工作的,但是当后面的数组是整数时,如array(0,1,2,3)时,就出问题了,php会将前的字符串进行intval,从而都会得到0这个值,那么如果恰巧,你的数组当中有这个值,那么等式就成立了,是不是又超出了预期呢?
所以,当确定后面的数据是整数时,尤其是还有可能为0(这个可能代替所有的字符串了),你就千万不能再使用这个函数了,可使用key_exists来代替,但是后面的数据则需要使用array_flip进行倒转操作了。

我们再来看个示例

function search($keyWord, $stack) {//此处判断是应该更新还是插入

      foreach ($stack as $key => $val) {

        if (in_array($keyWord, $val)) {

          return TRUE;

        }

      }

      return FALSE;

    }

  当一个字符串被当作数组来去取值时,又会发生什么呢?php是一门容错性很强的语言,它会尽量帮你改正错误,所以很聪明地将你的引用下标转化为整数,当然就得到0了,那么字符串下标为0取值则又会得到第一个字符串的值,是不是又超出了你的预期呢?解决方法是,在引用下标之前,还是确认一下这个变量是不是一个数组吧,is_array。

  虽然有许许多多的前辈遇到这样或那样的问题,也在不停地说,但是我们终究还是免不了,不停去犯错。这也许就是社会吧!大家都这么忙,哪有时间去破解你那烂代码! 哈哈

相关文章

  • PHP以mysqli方式连接类完整代码实例

    PHP以mysqli方式连接类完整代码实例

    这篇文章主要介绍了PHP以mysqli方式连接类完整代码实例,对于学习和了解mysqli都有很大的帮助,需要的朋友可以参考下
    2014-07-07
  • php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系

    php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系

    krsort() 函数将数组按照键逆向排序,为数组值保留原来的键。可选的第二个参数包含附加的排序标志
    2011-11-11
  • PHP中unset,array_splice删除数组中元素的区别

    PHP中unset,array_splice删除数组中元素的区别

    php中删除数组元素是非常的简单的,但有时删除数组需要对索引进行一些排序要求我们会使用到相关的函数,这里我们来介绍使用unset,array_splice删除数组中的元素区别吧
    2014-07-07
  • 一文解决PHP中生成随机数遇到的重复问题

    一文解决PHP中生成随机数遇到的重复问题

    项目开发中很多地方需要用到唯一编码,比如说订单、卡券、邀请码等等,这些编号是需要严格保证唯一性的,因为如果系统中订单的编号存在俩一模一样的,那造成很多数据的错乱,所以本文给大家介绍了如何解决PHP中生成随机数遇到的重复问,需要的朋友可以参考下
    2023-12-12
  • php备份数据库类分享

    php备份数据库类分享

    本文实例讲述了php实现MySQL数据库备份类。分享给大家供大家参考。具体分析如下:这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的配置好连接地址用户名与数据库即可
    2015-04-04
  • php class中public,private,protected的区别以及实例分析

    php class中public,private,protected的区别以及实例分析

    本篇文章是对php class中public,private,protected的区别以及实例进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 解决php-fpm.service not found问题的办法

    解决php-fpm.service not found问题的办法

    这篇文章主要给大家介绍了解决php-fpm.service not found问题的办法,文中详细介绍的解决这个问题的思路与过程,分享出来给大家,如果有同样问题的朋友就不用到处找解决办法了,下面来一起看看吧。
    2017-06-06
  • PHP通过header实现文本文件下载的代码

    PHP通过header实现文本文件下载的代码

    所谓实现文本文件的下载就是说当我们点击一个文本文件的链接的时候不是打开这个文件,而是弹出一个下载对话框让我们下载
    2010-08-08
  • JSON在PHP中的应用介绍

    JSON在PHP中的应用介绍

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。故整理一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识
    2012-09-09
  • php实用代码片段整理

    php实用代码片段整理

    这篇文章主要介绍了php实用代码片段,整理归纳了php常见的编程技巧代码段,包括网页、字符串、图片、日期、数组及json等操作技巧,需要的朋友可以参考下
    2016-11-11

最新评论