zoukankan      html  css  js  c++  java
  • php each和list的用法

    each与list的用法(PHP学习)

    1.each的用法

    先看API

    array each ( array &$array )

    api里是这么描述的:each — 返回数组中当前的键/值对并将数组指针向前移动一步

    我们先来看看返回的数组是怎么样的?

    <?php
     
    $arr = array('你','若','安','好','便','是','晴','天');
    print_r(each($arr));
    print_r(each($arr));
    echo '<hr />';
    /*
    返回
    Array
    (
        [1] => 你
        [value] => 你
        [0] => 0
        [key] => 0
    )
    Array
    (
        [1] => 若
        [value] => 若
        [0] => 1
        [key] => 1
    )
    */
    //执行相同的一段代码,从‘你’到‘若’,说明each是会每执行一次,游标向数组尾部移动一步
    //0和Key存放的是键
    //1和value存放的是值
    //因此each满足遍历数组的,得到当前的键和值,以及每执行一次,向尾部移动一步游标
    //因此循环数组也可以用each这么写
    reset($arr);
    for(;$tmp=each($arr);){
        echo $tmp[0],'~',$tmp[1],'<br />'; //不能携程$tmp['value'] $tmp['key']
    }
    /*
    返回
    0~你
    1~若
    2~安
    3~好
    4~便
    5~是
    6~晴
    7~天
    */
    ?>

    2.list的用法

    先看api是怎么说的

    像 array() 一样,这不是真正的函数,而是语言结构。list()用一步操作给一组变量进行赋值。  

    来看一个例子:

    <?php
     
    list($a,$b)=array(10,20);
    echo $a,'~',$b,'<br />';
    //返回10~20
    ?>

    没错可以给一组变量赋值

    再来看另外一个例子:

    <?php
     
    list($a,$b,,$c)=array(2=>10,3=>20,4=>30,1=>40);
    echo $a,'~',$b,'~',$c,'<br />';
    //返回notice~40~20
    //执行到$a的时候返回给我一个notice:说数组没有0键
    ?>

    按照一般的想法应该会返回:10~20~40

    为什么会返回这个notice~40~20呢?

    答: 这涉及到list的运行机制,list是这么赋值的

      首先:不要管右边的数组,看List里面的变量,从左到右应该是  $a = arr[0]   $b=arr[1]  $c=arr[3]

      然后:从右到左开始赋值,赋值的顺序是 $c=arr[3]  $b=arr[1]  $a=arr[0]

    所以$c=20  $b = 40  因为没有arr[0],所以$a给了一个警告

    3.用each和list实现数组的遍历

    <?php
     
    $arr = array('你','若','安','好','便','是','晴','天');
    for(;list($k,$v)=each($arr);){
        echo $k,'~',$v,'<br />';
    }
    /*
    return:
    0~你
    1~若
    2~安
    3~好
    4~便
    5~是
    6~晴
    7~天
    */
    ?>

    实战:

    <?php
    $array = array('你','若','安','好','便','是','晴','天');

    //each 功能介绍
    //执行相同的一段代码,从‘你’到‘若’,说明each是会每执行一次,游标向数组尾部移动一步
    //0和Key存放的是键
    //1和value存放的是值
    print_r($array);
    echo "<br></br>";
    print_r(each($array));
    echo "<br></br>";
    print_r(each($array));
    echo "<br></br>";
    print_r(each($array));
    echo "<br></br>";

    reset($array);//函数将内部指针指向数组中的第一个元素,并输出

    //遍历输出数组
    for(;$temp=each($array);){
    echo $temp[0].'~~'.$temp[1].'<br/>'; 
    }

    echo "<br></br>";
    //list list()用一步操作给一组变量进行赋值。
    //&a对应是listarray[0],&b对应是listarray[1],&c对应是listarray[3],
    $listarray = array(1=>10,2=>20,3=>30,0=>40);
    list($a,$b,,$c) = $listarray;
    echo $a.'~~'.$b.'~~'.$c.'<br/>';

    echo "<br></br>";
    reset($array);
    //list 需要结合each来遍历数组
    for(;list($k,$v)=each($array);){
    echo $k.'~~'.$v."<br/>";
    }

    ?>

    <?php
    //二维数组 foreach遍历
    $arr = array('one'=>array('name'=>'张三','age'=>'23','sex'=>'男'),
    'two'=>array('name'=>'李四','age'=>'45','sex'=>'女'),
    'three'=>array('name'=>'王五','age'=>'53','sex'=>'男'));

    echo'$arr的长度:'.count($arr)."<br/>";//3
    echo'$arr的长度:'.count($arr,1)."<br/>";//12
    foreach($arr as $k=>$val){
    echo'长度'.count($val).'--';//3
    echo $val['name'].$val['age'].$val['sex']."<br/>";
    }

    //一维数组 foreach遍历
    $arr = array('name'=>'林木','age'=>'24','sex'=>'男');
    foreach($arr as $k=>$val){
    echo $k.'~~'.$val."<br/>";
    }
    ?>

  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/IT-LM/p/6806014.html
Copyright © 2011-2022 走看看