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
)
时间: 2024-11-09 09:42:39

PHP array_flip() array_merge() array+array的使用总结的相关文章

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...]

PHP中array_merge和array相加的区别分析

今天处理一个这样的问题:如何获取字符键名相同值不同的两个数组值集合,用array_merge和数组相加都不可行,让我认真比较了下PHP中array_merge和array相加的区别 首先来看看键名是string,两者区别: 复制代码代码如下: <?php$arr1 = array('a'=>'PHP');$arr2 = array('a'=>'JAVA');//如果键名为字符,且键名相同,array_merge()后面数组元素值会覆盖前面数组元素值print_r(array_merge(

array_merge和array的区别分析

记得之前发现很多朋友用过array+array的方式,今天索性再聊下这样的话题:如何获取字符键名相同值不同的两个数组值集合?让我认真比较了下PHP中array_merge和array相加的区别 首先来看看键名是string,两者区别: <?php $arr1 = array('a'=>'PHP'); $arr2 = array('a'=>'PYTHON'); print_r(array_merge($arr1,$arr2)); //Array ( [a] => PYTHON ) 如

php 通过array_merge()和array+array合并数组的区别和效率比较

众所周知合并两个数组可以使用array_merge(),这是php提供的一个函数.另外还可以通过 array 的方式来合并数组,这两种直接有什么区别,哪一个的效率更高呢? array_merge() 格式: array array_merge ( array - ] ) 注意(区别): 如果合并的数组使用关联索引,数组中有相同的键名,则该键名后面的值将覆盖前一个值. 如果合并的数组使用数字索引,数组中有相同的键名, 后面的值将不会覆盖原来的值,而是附加到后面. 如果只给了一个数组并且该数组是数字

[单选题]以下脚本输出什么?&lt;?php $array = array (0.1 =&gt; &#39;a&#39;, 1.2 =&gt; &#39;b&#39;); echo count ($array);?&gt;

2 空 0 1 答案是A [单选题]以下脚本输出什么?<?php $array = array (0.1 => 'a', 1.2 => 'b'); echo count ($array);?>

hdu 6197 array array array

http://acm.hdu.edu.cn/showproblem.php?pid=6197 题意:给你一个数组 然后给你一个k  让你从数组里面剔除k个数  使得剩余的数组 是 单调非递减  或 单调非递增的 判断可不可能 思路 : 直接写LIS  然后判断 n-k 和 LIS 长度的大小关系 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+100; const int INF = 0x3f3f3f3f; i

2017 ACM/ICPC Asia Regional Shenyang Online array array array

2017-09-15 21:05:41 writer:pprp 给出一个序列问能否去掉k的数之后使得整个序列不是递增也不是递减的 先求出LIS,然后倒序求出最长递减子序列长度,然后判断去k的数后长度是否都大于所求长度 代码如下: #include <bits/stdc++.h> using namespace std; int arr1[100005],tmp1[100005],arr2[100005], tmp2[100005]; int len1,len2; int main() { in

33. Search in Rotated Sorted Array (Array;Divide-and-Conquer)

Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1. You may assume no duplic

88. Merge Sorted Array (Array)

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements init