• PHP学习之数组Array操作和键值对操作函数(一)


      PHP 中的数组实际上是一个有序映射。映射是一种把 values关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

      在PHP中,数组的每个元素都是由“键=>值”组成的,通过元素的键来访问对应的键的值。“关联数组”指的是键名为字符串的数组,“索引”和“键名“指的是同一样东西。”索引“多指数组的数字形式的下标。使用数组的处理函数,可以很方便的对数组中的每个元素的键和值进行操作。

      1定义数组array()

      可以用array()结构来新建一个数组,接受任意数量用逗号分隔的 键(key)=>值(value)对,其中键(key)可以是一个整数integer或者字符string,值(value)可以使任意类型的值。自PHP5.4起可以使用短数组定义语法,用[]替代array()。

    <?php
        $array=array(
            "foo"=>"bar",
            "bar"=>"foo"
            ); 
    
        $array=[          //自从PHP5.4以后。
            "foo"=>"bar",
            "bar"=>"foo",
        ];
    ?>
    

      key还会有如下的强制转换:

    • 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08"则不会强制转换,因为其不是一个合法的十进制数值。
    • 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8
    • 布尔值也会被转换成整型。即键名 true 实际会被储存为 1而键名 false 会被储存为 0
    • Null 会被转换为空字符串,即键名 null 实际会被储存为 ""
    • 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。    
    • 如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。
    <?php
    $array = array(
        1    => "a",
        "1"  => "b",
        1.5  => "c",
        true => "d",
    );
    var_dump($array);
    ?> 
    
    以上例子会输出:
    
    array(1) {
      [1]=>
      string(1) "d"
    }
    
    还可以只对某些单元指定键名而对其它的空置:
    
    <?php
    $array = array(
             "a",
             "b",
        6 => "c",
             "d",
    );
    var_dump($array);
    ?>
    
    
    以上例子输出
    
    array(4) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "b"
      [6]=>
      string(1) "c"
      [7]=>
      string(1) "d"
    }
    

      自PHP 5.4 起可以用数组间接引用函数或方法调用的结果。之前只能通过一个临时变量,自 PHP 5.5 起可以用数组间接引用一个数组原型。

    <?php
    function getArray() {
        return array(1, 2, 3);
    }
    
    // on PHP 5.4
    $secondElement = getArray()[1];
    
    // previously
    $tmp = getArray();
    $secondElement = $tmp[1];
    
    // or
    list(, $secondElement) = getArray();
    ?>
    

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

    <?php
    $arr = array(5 => 1, 12 => 2);
    
    $arr[] = 56;    //相当于增加了一个$arr[13] = 56;
    
    
    $arr["x"] = 42; //增加一个新元素,键key=’x‘
                    
    unset($arr[5]); //删除数组中5=>1
    
    unset($arr);    // 删除整个数组
    ?>
    

      

      如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上 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
    )
    

      

     2.is_array()  
      is_array — 检测变量是否是数组,bool is_array ( mixed $var ),如果 vararray,则返回 TRUE,否则返回 FALSE.

       3.explode()

      explode——使用一个字符串分割另一个字符串。array explode ( string $delimiter , string $string [, int $limit ] ),此函数返回由字符串组成的数组,每个元素都是 string的一个子串,它们被字符串 delimiter作为边界点分割出来。delimiter 边界上的分割字符,string输入的字符串,如果设置了 limit参数并且是正数,则返回的数组包含最多 limit个元素,而最后那个元素将包含 string的剩余部分。如果 limit参数是负数,则返回除了最后的 -limit个元素外的所有元素。如果 limit 是 0,则会被当做 1。

    <?php
    $str = 'one|two|three|four';
    
    // 正数的 limit
    print_r(explode('|', $str, 2));
    
    // 负数的 limit(自 PHP 5.1 起)
    print_r(explode('|', $str, -1));
    ?>
    
    以上例子会有如下输出
    
    Array
    (
        [0] => one
        [1] => two|three|four
    )
    Array
    (
        [0] => one
        [1] => two
        [2] => three
    )
    

      4.implode()

      implode — 将一个一维数组的值转化为字符串

    <?php
    
    $array = array('lastname', 'email', 'phone');
    $comma_separated = implode(",", $array);
    
    echo $comma_separated; // lastname,email,phone
    
    // 当数组为空时,返回的字符串也是空
    var_dump(implode('hello', array())); // string(0) ""
    
    ?> 
    

      5.split

      split — 用正则表达式将字符串分割到数组中,array split ( string $pattern , string $string [, int $limit ] ),本函数返回一个字符串数组,每个单元为 string 经区分大小写的正则表达式 pattern 作为边界分割出的子串。如果设定了 limit,则返回的数组最多包含 limit 个单元,而其中最后一个单元包含了 string 中剩余的所有部分。如果出错,则 split() 返回 FALSE

    <?php
    // 分隔符可以是斜线,点,或横线
    $date = "04/30/1973";
    list($month, $day, $year) = split ('[/.-]', $date);
    echo "Month: $month; Day: $day; Year: $year<br />
    ";
    ?> 
    

      6.preg_split()

      preg_split — 通过一个正则表达式分隔字符串,array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ),pattern用于搜索的模式,字符串形式。subject输入字符串

    limit如果指定,将限制分隔得到的子串最多只有limit个,返回的最后一个 子串将包含所有剩余部分。limit值为-1, 0或null时都代表"不限制", 作为php的标准,你可以使用null跳过对flags的设置。

      

     

  • 相关阅读:
    apache commons-io相关介绍-IOUtils类
    apache commons-io相关介绍-DirectoryWalker类
    apache commons-io相关介绍-FileUtils类
    apache commons-io相关介绍-monitor包
    android笔记--AsyncTask例子
    Java Swing中的SwingWorker
    Predicting Boston Housing Prices
    matplotlib.pyplot 中很好看的一种style
    机器学习算法比较
    udacity 机器学习课程 project2
  • 原文地址:https://www.cnblogs.com/coderchuanyu/p/3904711.html
Copyright © 2020-2023  润新知