zoukankan      html  css  js  c++  java
  • PHP中的Array

    PHP中的数组是一个有序映射(1对1的关系 key->value)。
    Array是一个综合体:可表示数组、字典、集合等。

    key可以是int或string。value可以是任意类型。

    key如下情况会强制转换:
    1.包含合法整型值的字符串=>整型。 "8"=>8 实际存储8
    2.浮点数=>整型。 8.7=>8 小数点会被舍去
    3.布尔类型=>类型。 true=>1,false=>0 实际存储为0或1
    4.Null=>“” 实际存储""
    5.数组和对象不能被用为键名。

    键名不可重复,若重复,则只有最后一个有效。

    <?php
    $array = array(
        1    => "a",
        "1"  => "b",
        1.5  => "c",
        true => "d",
    );
    var_dump($array);
    ?>

    以上例程会输出:

    array(1) {
      [1]=>
      string(1) "d"
    }

    上例中所有的键名都被强制转换为 1,则每一个新单元都会覆盖前一个的值,最后剩下的只有一个 "d"

    PHP数组可以同时含有int和string类型的键名,因为PHP 实际并不区分索引数组和关联数组。

    如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。

    Example #5 仅对部分单元指定键名

    <?php
    $array = array(
             "a",
             "b",
        6 => "c",
             "d",
    );
    var_dump($array);
    ?>

    以上例程会输出:

    array(4) {
      [0]=>  //默认从0开始
      string(1) "a"
      [1]=>
      string(1) "b"
      [6]=>
      string(1) "c"
      [7]=>   //没指定键,则从上个索引值+1
      string(1) "d"
    }

    数组单元可以通过 array[key] 语法来访问。
    Example #6 访问数组单元

    <?php
    $array = array(
        "foo" => "bar",
        42    => 24,
        "multi" => array(
             "dimensional" => array(
                 "array" => "foo"
             )
        )
    );
    
    var_dump($array["foo"]);
    var_dump($array[42]);
    var_dump($array["multi"]["dimensional"]["array"]);
    ?>

    以上例程会输出:

    string(3) "bar"
    int(24)
    string(3) "foo"

    Note:

    方括号和花括号可以互换使用来访问数组单元(例如 $array[42] 和 $array{42} 在上例中效果相同)。

     

    要修改某个值,通过其键名给该单元赋一个新值。要删除某键值对,对其调用 unset() 函数。

    <?php
    $arr = array(5 => 1, 12 => 2);
    
    $arr[] = 56;    // This is the same as $arr[13] = 56;
                    // at this point of the script
    
    $arr["x"] = 42; // This adds a new element to
                    // the array with key "x"
                    
    unset($arr[5]); // This removes the element from the array
    
    unset($arr);    // This deletes the whole array
    ?>
    Note:
    
    如上所述,如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上 1(但是最小为 0)。如果当前还没有整数索引,则键名将为 0。
    
    注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下面的例子来说明:
    <?php
    // 创建一个简单的数组
    $array = array(1, 2, 3, 4, 5);
    print_r($array);
    
    // 现在删除其中的所有元素,但保持数组本身不变:
    foreach ($array as $i => $value) {
        unset($array[$i]);
    }
    print_r($array);
    
    // 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
    $array[] = 6;
    print_r($array);
    
    // 重新索引:
    $array = array_values($array);
    $array[] = 7;
    print_r($array);
    ?>

    以上例程会输出:

    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
    )
    Array
    (
    )
    Array
    (
        [5] => 6
    )
    Array
    (
        [0] => 6
        [1] => 7
    )

    转换为数组

    对于任意 integer,float,string,boolean 和 resource 类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。换句话说,(array)$scalarValue 与 array($scalarValue) 完全一样。

    如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 '*' 做前缀。这些前缀的前后都各有一个 NULL 字符。这会导致一些不可预知的行为:

    <?php
    
    class A {
        private $A; // This will become 'AA'
    }
    
    class B extends A {
        private $A; // This will become 'BA'
        public $AA; // This will become 'AA'
    }
    
    var_dump((array) new B());
    ?>

    上例会有两个键名为 'AA',不过其中一个实际上是 'AA'。

    将 NULL 转换为 array 会得到一个空的数组。

    多用途的数组类型Array,以下为示例:

    Example #8 使用 array()

    <?php
    // Array as (property-)map
    $map = array( 'version'    => 4,
                  'OS'         => 'Linux',
                  'lang'       => 'english',
                  'short_tags' => true
                );
                
    // strictly numerical keys
    $array = array( 7,
                    8,
                    0,
                    156,
                    -10
                  );
    // this is the same as array(0 => 7, 1 => 8, ...)
    
    $switching = array(         10, // key = 0
                        5    =>  6,
                        3    =>  7, 
                        'a'  =>  4,
                                11, // key = 6 (maximum of integer-indices was 5)
                        '8'  =>  2, // key = 8 (integer!)
                        '02' => 77, // key = '02'
                        0    => 12  // the value 10 will be overwritten by 12
                      );
                      
    // empty array
    $empty = array();         
    ?>

    Example #9 集合

    <?php
    $colors = array('red', 'blue', 'green', 'yellow');
    
    foreach ($colors as $color) {
        echo "Do you like $color?
    ";
    }
    ?>

    以上例程会输出:

    Do you like red?
    Do you like blue?
    Do you like green?
    Do you like yellow?

    Example #10 在循环中改变单元

    <?php
    // PHP 5
    foreach ($colors as &$color) {
        $color = strtoupper($color);
    }
    unset($color); /* ensure that following writes to
    $color will not modify the last array element */
    
    // Workaround for older versions
    foreach ($colors as $key => $color) {
        $colors[$key] = strtoupper($color);
    }
    
    print_r($colors);
    ?>

    以上例程会输出:

    Array
    (
        [0] => RED
        [1] => BLUE
        [2] => GREEN
        [3] => YELLOW
    )

    Example #14 递归和多维数组

    <?php
    $fruits = array ( "fruits"  => array ( "a" => "orange",
                                           "b" => "banana",
                                           "c" => "apple"
                                         ),
                      "numbers" => array ( 1,
                                           2,
                                           3,
                                           4,
                                           5,
                                           6
                                         ),
                      "holes"   => array (      "first",
                                           5 => "second",
                                                "third"
                                         )
                    );
    
    // Some examples to address values in the array above 
    echo $fruits["holes"][5];    // prints "second"
    echo $fruits["fruits"]["a"]; // prints "orange"
    unset($fruits["holes"][0]);  // remove "first"
    
    // Create a new multi-dimensional array
    $juices["apple"]["green"] = "good"; 
    ?>
    
    数组(Array) 的赋值总是会涉及到值的拷贝。使用引用运算符通过引用来拷贝数组。
    <?php
    $arr1 = array(2, 3);
    $arr2 = $arr1;
    $arr2[] = 4; // $arr2 is changed,
                 // $arr1 is still array(2, 3)
                 
    $arr3 = &$arr1;
    $arr3[] = 4; // now $arr1 and $arr3 are the same
    ?>
  • 相关阅读:
    No configuration found for this host:al
    相对路径和绝对路径
    工具类学习
    JRebel没有自动部署的解决方法
    之前写了http解析高德地图时,json转对象搞了半天 , 今天同事用GSON把json转对象,一句代码就解决了,代码如下
    导入项目时遇到的问题
    解析Http请求调用高德地图的api(货车路径规划)
    二进制中的符号位的区分以及表示
    svn提交及更新时的常见问题
    JDBC 连接池下重构操作
  • 原文地址:https://www.cnblogs.com/zxx193/p/3914985.html
Copyright © 2011-2022 走看看