zoukankan      html  css  js  c++  java
  • php unset 数组陷阱

    我们删除一个array,

    unset($arr);

    想删除某个元素

    unsert($arr[i])

    一个陷阱是:

    unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。

     $a=array(1,2,3);
     for($i=0;$i<sizeof($a);$i++)
     {
         echo $a[$i];
     }
     unset($a[0]);
     
     for($i=0;$i<sizeof($a);$i++)
     {
         echo $a[$i];
     } 

    前面输出:1,2,3

    后面输出:

    Notice: Undefined offset: 0 in F:xampphtdocsphppassValueByReference.php on line 84
    2

    为什么?

    因为unset($a[0])将第1个元素给删除了,但是输出时,我们还从$i=0  开始的,当然就不对了,php可不会自动调整下标的

     $a=array(1,2,3);
     for($i=0;$i<sizeof($a);$i++)
     {
         echo $a[$i];
     }
     unset($a[0]);
     
     
     while(list($k,$v)=each($a))
     {
         echo $k.'->'.$v."<br/>";
     }
      

    还可以用array_values输出值.

    <?php
    $a = array(1 => 'one', 2 => 'two', 3 => 'three');
    unset($a[2]);
    /* will produce an array that would have been defined as
       $a = array(1 => 'one', 3 => 'three');
       and NOT
       $a = array(1 => 'one', 2 =>'three');
    */
    
    $b = array_values($a);
    // Now $b is array(0 => 'one', 1 =>'three')
    ?>

    array_values() 返回 input 数组中所有的值并给其建立数字索引。

    <?php
    $array 
    = array("size" => "XL""color" => "gold");
    print_r(array_values($array));
    ?>

    以上例程会输出:

    Array
    (
        [0] => XL
        [1] => gold
    )
  • 相关阅读:
    Spark性能优化指南——基础篇
    spark精华面试题
    JVM性能调优总结
    Eclipse安装Hadoop插件配置Hadoop开发环境
    CPU高的解决方法
    Flume源码分析--转载
    Flume-ng的原理和使用--转载
    spark内核源码深度剖析(2)--Spark的三种提交模式
    java调用so文件
    爬取网页数据基础
  • 原文地址:https://www.cnblogs.com/youxin/p/3246994.html
Copyright © 2011-2022 走看看