美文网首页
php数组合并,拆分,替换,组合

php数组合并,拆分,替换,组合

作者: kevinYY | 来源:发表于2017-03-24 22:34 被阅读0次

    php数组的操作(合并,拆分,删除,排序)

    1. 合并数组

    array_merge ( array $array1 [, array $... ] )

    array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

    如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

    如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引

    对比: 如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符:

    <?php
    $array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');
    $array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b');
    $result = $array1 + $array2;
    var_dump($result);
    ?>
    

    第一个数组的键名将会被保留。在两个数组中存在相同的键名时,第一个数组中的同键名的元素将会被保留,第二个数组中的元素将会被忽略,输出为:

    array(5) {
      [0]=>
      string(6) "zero_a"
      [2]=>
      string(5) "two_a"
      [3]=>
      string(7) "three_a"
      [1]=>
      string(5) "one_b"
      [4]=>
      string(6) "four_b"
    }
    

    array_combine ( array $keys , array $values )

    返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。

    2. 递归地合并数组(追加数组)

    array array_merge_recursive ( array $array1 [, array $... ] )

    array_merge_recursive() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

    如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。

    array_merge 和 array_merge_recursive都是合并数组,区别在于:当某个输入数组的某个字符串键名已经存在要合并的初始数组中时,两个函数会采取不同的处理方式。array_merge()会覆盖前面存在的键值对,而array_merge_recursive()将两个值合并在一起行成新的数组,并以原有的键作为数组键名
    官网的例子:

    <?php
    $ar1 = array("color" => array("favorite" => "red"), 5);
    $ar2 = array(10, "color" => array("favorite" => "green", "blue"));
    $result = array_merge_recursive($ar1, $ar2);
    print_r($result);
    ?>
    

    输出:

    Array
    (
        [color] => Array
            (
                [favorite] => Array
                    (
                        [0] => red
                        [1] => green
                    )
    
                [0] => blue
            )
    
        [0] => 5
        [1] => 10
    )
    

    3.数组元素的替换

    array array_replace ( array $array1 , array $array2 [, array $... ] )

    array_replace() 函数使用后面数组元素相同 key 的值替换 array1 数组的值。如果一个键存在于第一个数组同时也存在于第二个数组,它的值将被第二个数组中的值替换。如果一个键存在于第二个数组,但是不存在于第一个数组,则会在第一个数组中创建这个元素。如果一个键仅存在于第一个数组,它将保持不变。如果传递了多个替换数组,它们将被按顺序依次处理,后面的数组将覆盖之前的值。

    array_replace() 是非递归的:它将第一个数组的值进行替换而不管第二个数组中是什么类型。

    同样也有递归替换array_replace_recursive

    array array_replace_recursive ( array $array1 , array $array2 [, array $... ] )

    array_replace_recursive() 使用后面数组元素的值替换数组 array1 的值。 如果一个键存在于第一个数组同时也存在于第二个数组,它的值将被第二个数组中的值替换。 如果一个键存在于第二个数组,但是不存在于第一个数组,则会在第一个数组中创建这个元素。 如果一个键仅存在于第一个数组,它将保持不变。 如果传递了多个替换数组,它们将被按顺序依次处理,后面的数组将覆盖之前的值。

    **上面这段话描述了三种情况:

    1. 被替换数组和替换数组存在相同的键,被替换数组中对应的值将被替换
    2. 被替换数组中独有的键不受影响
    3. 替换数组中独有的键不会影响被替换数组
      **

    array_replace_recursive() 是递归的:它将遍历数组并将相同的处理应用到数组的内部值。

    如果数组 array1 中的值是标量,它的值将被第二个数组 array2 中的值替换,它可能是一个标量或者数组。如果 array1 和 array2 中的值都是数组,array_replace_recursive() 函数将递归地替换它们各自的值。

    <?php
    $base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), );
    $replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry'));
    
    $basket = array_replace_recursive($base, $replacements);
    print_r($basket);
    
    $basket = array_replace($base, $replacements);
    print_r($basket);
    ?>
    //输出:
    Array
    (
        [citrus] => Array
            (
                [0] => pineapple
            )
    
        [berries] => Array
            (
                [0] => blueberry
                [1] => raspberry
            )
    
    )
    Array
    (
        [citrus] => Array
            (
                [0] => pineapple
            )
    
        [berries] => Array
            (
                [0] => blueberry
            )
    
    )
    
    

    Example #2 array_replace_recursive() 及其递归表现

    <?php
    $base = array('citrus' => array("orange") , 'berries' => array("blackberry", "raspberry"), 'others' => 'banana' );
    $replacements = array('citrus' => 'pineapple', 'berries' => array('blueberry'), 'others' => array('litchis'));
    $replacements2 = array('citrus' => array('pineapple'), 'berries' => array('blueberry'), 'others' => 'litchis');
    
    $basket = array_replace_recursive($base, $replacements, $replacements2);
    print_r($basket);
    
    ?>
    //输出:
    Array
    (
        [citrus] => Array
            (
                [0] => pineapple
            )
    
        [berries] => Array
            (
                [0] => blueberry
                [1] => raspberry
            )
    
        [others] => litchis
    )
    

    4. 拆分数组

    array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )

    array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。
    其中offset 和 length 都可为负数。php系统函数的规律:这种情况正数表示顺序,负数表示位置

    对比: array_splice — 去掉数组中的某一部分并用其它值取代

    array_splice ( array &$input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]] )
    把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用其中的单元取代。

    注意 input 中的数字键名不被保留。

    相关文章

      网友评论

          本文标题:php数组合并,拆分,替换,组合

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