• PHP array_flip() array_merge() array+array的使用总结


    array_flip(array);

    //传递一个数组参数,对该数组的键、值进行翻转

    例如:

    $a = array(
        'a',
        'b',
        'c'
    );
    print_r(array_flip($a));
    
    //输出为:
    Array
    (
        [a] => 0
        [b] => 1
        [c] => 2
    )
    
    //需要注意的是: array_flip(): Can only flip STRING and INTEGER values

    array_merge (array1,array2[,aray3...])

    //对两个或多个数组进行合并(传递一个数组参数也是可以的)

    需要注意的是:

    1. 如果数组中没有键名,则不管他们的值的交集存不存在重复,最终结果都会以下标为0开始的数组返回,值的顺序依次为array1、array2..
    2. 如果数组中设置有键名,且键名存在重复,则该键值为最后一个键名对应的值(覆盖前面)
    3. 如果数组是指定数字索引,则结果的键名会以从0开始的数组重新进行索引
    4. 如果数组中的键名存在以上的组合情况,则以显式指定键名的优先
    5. 总结一点是,他要保证合并后的数组索引不能重复,若没指定键名或指定键名为数字,则结果按从0开始的数字重新进行,若指定了非数字索引,则他会保留之前的索引,但如果存在多个,则只保留最后一个

    几个例子:

    //没有指定索引
    $a = array(
        'a',
        'b',
    );
    $b = array(
        'a',
        'b',
    );
    $arr = array_merge($a,$b);
    //输出:
    Array
    (
        [0] => a
        [1] => b
        [2] => a
        [3] => b
    )
    //=======================
    //显式指定数字键名
    $a = array(
        3=>'a',
        4=>'b',
    );
    $b = array(
        1=>'a',
        2=>'b',
    );
    $arr = array_merge($a,$b);
    //输出:
    Array
    (
        [0] => a
        [1] => b
        [2] => a
        [3] => b
    )
    //=======================
    //显式指定数字键名和无索引混合
    $a = array(
        3=>'a',
        'b',
    );
    $b = array(
        'a',
        2=>'b',
    );
    $arr = array_merge($a,$b);
    //输出:
    Array
    (
        [0] => a
        [1] => b
        [2] => a
        [3] => b
    )
    //=======================
    //显式指定非数字索引1
    $a = array(
        'a'=>1,
        'b',
    );
    $b = array(
        'a',
        'b',
    );
    $arr = array_merge($a,$b);
    //输出:
    Array
    (
        [a] => 1
        [0] => b
        [1] => a
        [2] => b
    )
    //=======================
    //显式指定非数字索引2
    $a = array(
        'a'=>1,
        'b'=>2,
    );
    $b = array(
        'a',
        'b'=>22,
    );
    $arr = array_merge($a,$b);
    //输出:
    Array
    (
        [a] => 1
        [b] => 22
        [0] => a
    )

    其他的几种组合例子就不贴上去了……

    array1+array2

    这种写法其实没用过,研究了一把,他其实也是用来合并数组操作。用法和array_merge有一定的区别。

    1. 若数组没有指定索引,则他会先把array1的先赋值给结果,假设array1长度为3,array2长度为5,则他会把array2[3]、array2[4]追加到结果后面,array2[0-2]直接忽略
    2. 若为数组指定了索引,不管为数字还是非数字索引,最终结果都会保留指定的索引,若两个数组存在重复的索引,则以第一个为最终结果(覆盖后面)
    3. 指定索引和无索引混合的情况下,先看array1,若前几个为无索引,比如前3个没有指定,则还按照规则1,忽略掉array2中的前3个。若array1[0]为显式指定索引,则不会忽略array2中的数组元素,除非存在指定相同的索引,遵循规则2

    几个例子:

    //没有指定索引
    $a = array(
        'a',
        'b',
    );
    $b = array(
        'c',
        'd',
        'e'
    );
    $arr = $a + $b;
    //输出:
    Array
    (
        [0] => a
        [1] => b
        [2] => e
    )
    //=======================
    //指定数字索引
    $a = array(
        1=>'a',
        2=>'b',
    );
    $b = array(
        4=>'c',
        7=>'d'
    );
    $arr = $a + $b;
    //输出:
    Array
    (
        [1] => a
        [2] => b
        [4] => c
        [7] => d
    )
    //=======================
    //指定索引,存在重复
    $a = array(
        'a'=>11,
        'b'=>22,
    );
    $b = array(
        'c'=>33,
        'd'=>44,
        'a'=>55
    );
    $arr = $a + $b;
    //输出:
    Array
    (
        [a] => 11
        [b] => 22
        [c] => 33
        [d] => 44
    )
    //=======================
    //混合指定索引和无索引1
    $a = array(
        'a',
        2=>'b',
    );
    $b = array(
        'c',
        'd',
        10=>'a',
        4=>22
    );
    $arr = $a + $b;
    //输出:
    Array
    (
        [0] => a
        [2] => b
        [1] => d
        [10] => a
        [4] => 22
    )
    //=======================
    //混合指定索引和无索引2 
    $a = array(
        2=>'b',
        'a',
    );
    $b = array(
        'c',
        'd',
        10=>'a',
        4=>22
    );
    $arr = $a + $b;
    //输出:
    Array
    (
        [2] => b
        [3] => a
        [0] => c
        [1] => d
        [10] => a
        [4] => 22
    )

    array_flip和array+array的搭配使用(去掉两个数组中重复的值):

    $a = array(
        'a',
        'b',
        'c'
    );
    $b = array(
        'a1',
        'b1',
        'c'
    );
    $arr = array_flip($a) + array_flip($b);
    print_r(array_keys($arr));
    //输出:
    Array
    (
        [0] => a
        [1] => b
        [2] => c
        [3] => a1
        [4] => b1
    )
  • 相关阅读:
    [C/C++]Fibonacci numbers
    使用VS调试时,被调试进程如何被断下来的。
    Windows下动态加载可执行代码原理简述
    发个JD, 求人被我卖
    使用Windbg知道程序运行时的命令行参数.
    How to debug usermode process using kernelmode windbg in Win7
    This is a test
    多核时代,还在使用任务管理器来看程序的性能吗?
    六种异常处理的陋习
    巧记Java访问控制描述符(Access Control Modifier)public, private, protected
  • 原文地址:https://www.cnblogs.com/fanchangfa/p/4155274.html
Copyright © 2020-2023  润新知