zoukankan      html  css  js  c++  java
  • php中each()与list()函数

    <?php

    $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
    reset($fruit);
    while (list($key, $val) = each($fruit)) {
        echo "$key => $val ";
    }
    ?>

    以上例程会输出:

    a => apple b => banana c => cranberr

    这是从官方网站查询到的,很费解while里面的条件判断语句,查询了不少资料也没看出个所以然,不得不自己动手看一下:

    1.list()语言结构是从参数的最右边开始赋值的,举下面两个的小例子证明:

    <?php

    list($b, $c, $a[$b][$c]) = array('a', 'b', 'c');

    print_r($a);
    ?>

    运行后出现的结果是:

    Notice: Undefined variable: b in F:wwwmy est2.php on line 9

    Notice: Undefined variable: c in F:wwwmy est2.php on line 9
    Array ( [] => Array ( [] => c ) )   
    //显示变量$b与$c未定义;

    <?php
    list($a[$b][$c], $b, $c) = array('a', 'b', 'c');

    print_r($a);
    ?>

    运行后出现的结果是:

    Array
    (
        [b] => Array
            (
                [c] => a
            )
    
    )


    2.list() 仅能用于数字索引的数组并假定数字索引从 0 开始。
    <?php
    $arr = array('a');
    list($b,$c)=each($arr);
    echo $b.'<br/>'.$c;
    ?>
    运行后出现的结果是:
    0
    a  
    原因如下:
    1)list()是先找索引为0的元素,找不到后则为空,后面的继续:
    如下所示:

    <?php
    $aee = array(1=>'a','c'=>'kk',3=>'b',2=>'d');
    list($a,$b,$c)=$aee;
    echo "a:$a b:$b c:$c ".'<br/>';

    ?>

    运行后出现的结果是:
    Notice: Undefined offset: 0 in F:wwwmy est2.php on line 9
    a: b:a c:d 

    2)如果有两个相同的索引不同的值,则会以后面索引的值为准,如下所示:

    <?php
    $aee = array(1=>'a','bb'=>'dd',2=>'kk',0=>'b',1=>'d');
    list($a,$b,$c)=$aee;
    echo "a:$a b:$b c:$c ".'<br/>';

    ?>

    运行后出现的结果是:

    a:b b:d c:kk

    表明$b的值是d而不是a。

    3)由以上几个例子可以看出,list()不仅用于数字索引的数组并假定数字索引从 0 开始的,而且也可以用于有数字索引的数组,前提条件是数字索引是从0开始的连续数字;

    它会自动选择数字索引过滤非数字索引,上面官网的例子中的判断条件也就清楚了。

    3.上面官网例子中reset($fruit);在while()语句上面作用并不大,应该放到它下面才会释放由于each()而导致的数组指针的指向而指向第一个单元,如下面的例:

    <?php

    $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');

    while (list($key, $val) = each($fruit)) {
    echo "$key => $val ";
    }
    reset($fruit);
    list($a,$b) = each($fruit);
    echo $a.'nihao';
    ?>

    运行后出现的结果是:

    a => apple
    b => banana
    c => cranberry
    anihao

    <?php

    $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
    reset($fruit);
    while (list($key, $val) = each($fruit)) {
    echo "$key => $val ";
    }

    list($a,$b) = each($fruit);
    echo $a.'nihao';
    ?>

    运行后出现的结果是:

    a => apple b => banana c => cranberry nihao

    4.上面官网例子根据李炎恢老师的讲解,应该完善一下,代码如下:

    <?php

    $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
    reset($fruit);
    while (!!list($key, $val) = each($fruit)) {
        echo "$key => $val ";
    }
    ?>
    while语句里面应该是条件判断语句,转换成布尔值后比较合理。

     
     
     
  • 相关阅读:
    30分钟带你了解Docker
    30分钟了解Springboot整合Shiro
    vuejs 和 element 搭建的一个后台管理界面
    MySQL缓存参数优化(转)
    MVC+EF(CODEFIRST)+EASYUI医药MIS系统
    博客园开通打赏功能以及HTTPS打赏失效的探究 -玩转打赏功能
    SpringMVC集成rabbitmq:优化秒杀下单环节
    国内最火5款Java微服务开源项目
    SpringCloud系列——SSO 单点登录
    玩转spring boot
  • 原文地址:https://www.cnblogs.com/anns/p/3384387.html
Copyright © 2011-2022 走看看