美文网首页
三、数组

三、数组

作者: ManZb | 来源:发表于2016-11-14 18:08 被阅读0次

    1、基本内容

    • range(low,high,[step]);函数,创建一个包含指定范围的元素的数组。
      参数step:可选。规定元素之间的步进制。默认是 1。
      如:range(0,10,2);输出以2递增,到10结束的数组。
    • 循环输出数组内容
    $price['a'] = 100; 
    $price['b'] = 10; 
    $price['c'] = 4;
    1-foreach()方法
    foreach ($price as $key=>$value){
            echo $key." - ".$value."<br />";
        }
    2-each()方法
    while($element = each($price)){
            echo $element['key'];
            echo " -- ";
            echo $element['value'];
            echo "<br />";
        }
    3-list()方法
    reset($price);
    使用each()函数时,数组将记录当前元素,若要在相同的脚本中
    多次使用该数组,应重置数组的指针到开始处
    while(list($product,$pric) = each($price)){
            echo $product." - - ".$pric."<br />";
        }
    list()可以重命名数组的key和value值,该函数只使用于数字索引的数组,且默认从0开始
    
    • 二维数组
    $products = array(
                array('Code' => 'TIR',
                        'Desc' => 'Tires',
                        'Price' => 100
                ),
                array('Code' => 'OIL',
                        'Desc' => 'Oil',
                        'Price' => 10
                ),
                array('Code' => 'SPK',
                        'Desc' => 'Spark Plugs',
                        'Price' => 4
                ),
        );
        for($row=0; $row<3; $row++){
            while(list($key, $value) = each($products[$row])){
                echo " |$value";
            }
            echo " |<br />";
        }
    输出:
    |TIR |Tires |100 |
    |OIL |Oil |10 |
    |SPK |Spark Plugs |4 |
    
    • 数组排序(一维数组和多维数组)
    • 一维数组的一些排序函数
      1、适用于无关联的数组,如一维数字索引数组
    $arr = array('Tir','Oil' ,'Spk' ,);
    sort(arr,[sortingtype]); 函数对索引数组进行升序排序
    如果成功则返回 TRUE,否则返回 FALSE
    参数sortingtype:可选。规定如何比较数组的元素/项目
    0 = SORT_REGULAR - 默认。把每一项按常规顺序排列
    1 = SORT_NUMERIC - 把每一项作为数字来处理
    2 = SORT_STRING - 把每一项作为字符串来处理。
    

    2、适用于关联数组的排序如一维关联数组

    $arr = array('Tir' => 100,'Oil' => 10,'Spk' => 4,);
    asort();ksort();
    若用关联数组存储各个项目和它们的价格,
    就需要用不同的排序函数使关键字和值在排序时仍然保持一致。
    asort();将数组的value值升序排序
    ksort();将数组的key值升序排序
    

    3、反向排序

    对应于 sort(),asort(),ksort(),反向排序函数依次为
    rsort(),arsort(),krsort(),使数组降序排序。
    
    • 多维数组排序usort()
    usort();用例:
        $products = array(
                array('Code' => 'TIR',
                        'Desc' => 'Tires',
                        'Price' => 100
                ),
                array('Code' => 'OIL',
                        'Desc' => 'Oil',
                        'Price' => 10
                ),
                array('Code' => 'SPK',
                        'Desc' => 'Spark Plugs',
                        'Price' => 4
                ),
        );
        usort($products, "usortRank");
        function usortRank($a,$b){
            $a1 = $a['Price'];
            $b1 = $b['Price'];
            if($a1 == $b1){
                return 0;
            }
            return ($a1>$b1 ?  1:-1);
        }
        print_r($products);
    

    类似于asort()和ksort()对应有uasort()和uksort()

    • 对数组进行重新排序
      shuffle()函数将数组次序随机打乱;
      array_reverse()给出一个原数组的反向排序
      array_push()函数将每个新元素添加到数组的末尾
      array_pop()函数删除并返回数组末尾的一个元素
    • explode()函数:将字符串打散为数组
    explode(separator,string,limit);
    *separator*必需。规定在哪里分割字符串。
    *string*必需。要分割的字符串。
    *limit*可选。规定所返回的数组元素的数目。
    可能的值:
    大于 0 - 返回包含最多 *limit* 个元素的数组
    小于 0 - 返回包含除了最后的 -*limit* 个元素以外的所有元素的数组
    0 - 返回包含一个元素的数组
    如:
    $str = 'one,two,three,four';
    print_r(explode(',',$str));输出结果为:Array ( [0] => one [1] => two [2] => three [3] => four)
    print_r(explode(',',$str,0));输出结果为:Array ( [0] => one,two,three,four )
    print_r(explode(',',$str,2));输出结果为:Array ( [0] => one [1] => two,three,four )
    print_r(explode(',',$str,-1));//返回不包含最后一个元素的数组
    即 Array ( [0] => one [1] => two [2] => three )
    
    • 数组中浏览
    each() 函数返回当前元素的键名和键值,并将内部指针向前移动
    current() - 返回数组中的当前元素的值
    end() - 将内部指针指向数组中的最后一个元素,并输出
    next() - 将内部指针指向数组中的下一个元素,并输出
    prev() - 将内部指针指向数组中的上一个元素,并输出
    reset() - 将内部指针指向数组中的第一个元素,并输出
    --
    $arrTest = range(1, 10);
    print_r(each($arrTest));
    //Array ( [1] => 1 [value] => 1 [0] => 0 [key] => 0 )
    --2
        $people = array("Bill", "Steve", "Mark", "David");
        reset($people);
        while (list($key, $val) = each($people)){
            echo "$key => $val<br>";
        }
    --例子
        <?php
        $people = array("Bill", "Steve", "Mark", "David");
        echo current($people) . "<br>"; // 当前元素是 Bill
        echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
        echo current($people) . "<br>"; // 现在当前元素是 Steve
        echo prev($people) . "<br>"; // Steve 的上一个元素是 Bill
        echo end($people) . "<br>"; // 最后一个元素是 David
        echo prev($people) . "<br>"; // David 之前的元素是 Mark
        echo current($people) . "<br>"; // 目前的当前元素是 Mark
        echo reset($people) . "<br>"; // 把内部指针移动到数组的首个元素,即 Bill
        echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
        print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针
        ?>
    
    • array_walk($arr, $func, [userdata...])
      对数组中的元素运用自定义函数,在函数中,数组的键名和键值是参数
           $arrTest = range(1, 10);
        function my_print(&$value,$key,$factor){
            echo $value *= $factor;
            echo "<br />";
        }
        array_walk($arrTest, 'my_print', 3);
        echo "<hr/>";
        print_r($arrTest);
    这里的&符号是引用传值,将数组的每个元素的值都乘以3。
    
    • extract($arr, $extract_rules, $prefix)
      该函数对数组键名作为变量名,使用数组键值作为变量值
    *array*
    必需。规定要使用的数组。
    *extract_rules*
    可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。
    可能的值:
    EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
    EXTR_SKIP - 如果有冲突,不覆盖已有的变量。
    EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 *prefix*。
    EXTR_PREFIX_ALL - 给所有变量名加上前缀 *prefix*。
    EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 *prefix*。
    EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。
    EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
    EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。
    -
    *prefix*
    可选。请注意 *prefix* 仅在 *extract_type* 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。
    前缀和数组键名之间会自动加上一个下划线
    
    1-
        $arr = array('k1'=>'v1','k2'=>'v2','k3'=>'v3');
        extract($arr);
        echo $k1;//输出v1
    2-
        $k1 = 'bv';
        $arr = array('k1'=>'v1', 'k2'=>'v2', 'k3'=>'v3');
        extract($arr, EXTR_PREFIX_SAME, 'same');
        echo "$k1 , $k2 , $k3 , $same_k1";
        //输出 bv , v2 , v3 , v1
    

    相关文章

      网友评论

          本文标题:三、数组

          本文链接:https://www.haomeiwen.com/subject/xlvbuttx.html