• 【PHP】解析PHP中的数组


    目录结构:

    contents structure [-]

    在这篇文章中,笔者将会介绍PHP中数组的使用,以及一些注意事项。之前笔者已经说过PHP是一门弱语言类型,因此php中的数组使用也比较灵活。

    1.创建数组

    创建数组的方式有好几种,比如:

    <?php
    //格式:
    //$数组变量名[索引值]=资料内容
    $foos[0] = "hello ";
    $foos[1] = "world ";
    
    //格式:
    //array( [key =>] value , ... )
    //key 可以是 integer 或者 string。value 可以是任意类型。
    $foos = array(prefix => "hello ",suffix => "world ");
    $foos = array(0 => "hello ",suffix => "world ");
    
    //也可以不用指定键(key)
    $foos = array("hello ","world ");
    
    //创建多维数组
    //格式:
    //array(
    //    array(...),
    //    array(...),
    //    array(...),
    //    ...);
    //下面创建一个2行,第一行为1,2,3,4,5,6,第二行为1,2,3,4,5,6,7的二维数组。
    $flat = array(
        row1 => array(1,2,3,4,5,6),
        row2 => array(1,2,3,4,5,6,7)
    );
    ?>

    在使用array(...)的形式创建数组时,其中key会有如下的强制转化要求:
    1.包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
    2.浮点数会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
    3.布尔值会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
    4.Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
    5.数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

    除此之外使用array(...)定义数组还有如下特性:
    1.如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖.
    2.如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

    2.删除数组

    PHP中允许删除整个数组,同时也允许删除某一个键/值对。
    比如:

    <?php
    echo "begin
    ";
    
    $foos = array("how","are","you");
    
    echo("counts = ".count($foos)."
    ");
    foreach ($foos as $f){
        echo($f."
    ");
    }
    
    unset($foos);
    
    echo("counts = ".count($foos)."
    ");
    for($i = 0; $i <= count($foos); $i++){
        echo($foos[$i]."
    ");
    }
    echo("finish
    ");
    ?>

    输出结果为:

    begin
    counts = 3
    how
    are
    you
    counts = 0
    
    finish

    上面展示了在删除整个数组后,数组的数量就变成0了。接下笔者将会演示只删除其中某一个键/值对,以及需要注意的地方。

    <?php
    $arr = array("how","are","you");
    print_r($arr);
    print("----------------
    ");
    //清除键为1的键/值对
    unset($arr[1]);
    print_r($arr);
    ?>

    输出结果如下:

    Array
    (
        [0] => how
        [1] => are
        [2] => you
    )
    ----------------
    Array
    (
        [0] => how
        [2] => you
    )

    通过这个结果可以看出,当使用unset()删除其中某一个键/值对时候,其余的键不会自动调整编号。非常容易理解这种设计,因为array本质上就是按照键/值对进行存储的,删除其中一对键/值对,就改变其他键/值对的话,肯定不符合常理,并且有些键更本就不能按照数值大小(字符串)排序。那么有没有一种常规的排序方法,能够在删除数组中的某一键/值对后,只把以数值为键的键值对从0升序排列呢?答案是肯定的,array_multisort(...)就能完成这样的功能。

    <?php
    $arr = array("how","are","dot"=>",","you");
    print_r($arr);
    print("----------------
    ");
    //清除键为1的键/值对
    unset($arr[1]);
    array_multisort($arr);
    print_r($arr);
    
    ?>

    输出结果:

    Array
    (
        [0] => how
        [1] => are
        [dot] => ,
        [2] => you
    )
    ----------------
    Array
    (
        [dot] => ,
        [0] => how
        [1] => you
    )

    通过输出结果可以看出,以字符串为键的键/值对保留了下来,以数值为键的键/值对被重新排序。

    3.栈结构

    上面说过,PHP中数组的使用非常灵活,同样可以用于模拟栈结构。栈结构具有“先进后出”的特点。数组中提供了array_push和array_pop方法。
    array_push在尾部添加元素。
    array_pop从尾部弹出一个元素。
    例如:

    <?php
    $arr = Array();
    
    array_push($arr, "how");
    print("push "how" into array
    ");
    array_push($arr, "are");
    print("push "are" into array
    ");
    array_push($arr, "you");
    print("push "you" into array
    ");
    
    print("------------------------
    ");
    
    print("pop "".array_pop($arr)."" from array
    ");
    print("pop "".array_pop($arr)."" from array
    ");
    print("pop "".array_pop($arr)."" from array
    ");
    ?>

    输出结果为:

    push "how" into array
    push "are" into array
    push "you" into array
    ------------------------
    pop "you" from array
    pop "are" from array
    pop "how" from array

    4.常用的数组处理函数

    PHP中提供了许多数组处理函数,下面笔者列举一些常用的:
    array each( array array)   返回 array 数组中当前指针位置的键/值对并向前移动数组指针
    void list ( mixed ...)  通过一个操作给一组变量赋值
    array_shift 将数组开头的单元移出数组
    array_unshift 在数组开头插入一个或多个单元
    array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
    array_merge 合并一个或多个数组
    array_splice 把数组中的一部分去掉并用其它值取代

    参考文章:

    http://php.net/

  • 相关阅读:
    jquery-ui.min.js:5 Uncaught TypeError: b.nodeName.toLowerCase is not a function
    HTTP::Request
    LWP::UserAgent
    perl json模块
    perl 处理perl返回的json
    perl中 wx返回的json需要encode_utf8($d);
    perl malformed JSON string, neither tag, array, object, number, string or atom, at character offset
    encode_json 会对给定的Perl的数据结构转换为一个UTF-8 encoded, binary string.
    为什么出现Wide character in print at a14.pl line 41
    perl encode_json 会产生 UTF-8 (binary) string decode_json 需要一个 UTF-8 (binary) string
  • 原文地址:https://www.cnblogs.com/HDK2016/p/10195020.html
Copyright © 2020-2023  润新知