本文目录一览:
- 1、PHP数组的几个操作,求并集,交集,差集,数组
- 2、php带索引检查计算数组的交集?
- 3、PHP两个数组的交集?
- 4、PHP高手请进。把一个三维数组里的所有二维数组取出来比较,取交集...
- 5、php 如何写一个取一维数组交集的公共方法
PHP数组的几个操作,求并集,交集,差集,数组
PHP数组的几个操作,求并集,交集,差集,数组与字符串的相互转换及数组去重
在php中如果我想要对两个数组进行如并集、交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersect(),array_diff().
计算数组的合并 array_merge与“+”的区别
array_merge() 函数把两个或多个数组合并为一个数组。
如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的),如果数组是数字索引的,则键名会以连续方式重新索引。
注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引.代码如下:
$a = array(1 = 'a', 'b', 'c');
$b = array(1 = 'aa', 2, 'c');
$union = array_merge($a, $b);
$plus = $a + $b;
print_r($union);
print_r($plus);
//结果依次为:
Array
{
[0]= a
[1]= b
[2]= c
[3]= aa
[4]= 2
[5]= c
}
Array
(
[1] = a
[2] = b
[3] = c
)
要合并的两个数组中有相同的字符串键的时候,使用array_merge()会覆盖掉原来的值,而使用“+”合并数组则会和用“+”号合并数组相同数字键一样把最先出现的值作为最终结果返回,如下例:
$a2 = array('str' = 'a', 'b', 'c');
$b2 = array('str' = 'aa', 2, 'c');
$union2 = array_merge($a2, $b2);
$plus2 = $a2 + $b2;
print_r($union2);
print_r($plus2);
//结果依次为:
Array
(
[str] = aa
[0] = b
[1] = c
[2] = 2
[3] = c
)
Array
(
[str] = a
[0] = b
[1] = c
)
注:如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉
计算数组的交集
array_intersect() 函数返回两个或多个数组的交集数组,结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变,注释:仅有值用于比较,代码如下:
$a = array('jpg','png','gif','bmp');
$b = array('JPG','txt','docx','bmp');
$intersection = array_intersect($a, $b);
还可以通过函数,获取自己想要的(比如元素不区分大小写),代码如下:
$intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b));
print_r($intersection);
print_r($intersection2);
//结果依次为:
Array
(
[3] = bmp
)
Array (
[0] = jpg
[3] = bmp
)
计算数组的差集,代码如下:
$old = array('jpg','png','gif','bmp');
$new = array('JPG','txt','docx','bmp');
$difference = array_diff($old, $new);
注:返回结果的元素包含$old的元素,不包括$new的元素
print_r($difference);
结果为:
Array
(
[0] = jpg
[1] = png
[2] = gif
)
也可以用函数先进行处理,再计算差集
array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值,在返回的数组中,键名保持不变。
语法:array_diff(array1,array2,array3...)
代码如下:
$difference = array_diff(array_map('strtolower',$old),
array_map('strtolower',$new));
数组转换为字符串:
?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?
字符串转换为数组:
?php
$str="1432532 ,4444";
$arr = explode(",",$str);
echo count($arr)."/br";
print_r($arr);
?
数组元素值去重
?php
$a=array("a"="red","b"="green","c"="red");
print_r(
array_unique($a)
);
?
针对有空格的字符串转换成无空格的字符串
?php
$str="1432532 ,67878";
$arr = explode(",",$str);
//echo count($arr)."/br";
$str_u='';
for($i=0;$icount($arr);$i++)
{
$str_u .=trim($arr[$i]).',';
}
echo $str_u;
?
php带索引检查计算数组的交集?
array_intersect_assoc
(PHP 4 = 4.3.0, PHP 5, PHP 7)
array_intersect_assoc — 带索引检查计算数组的交集
说明
array_intersect_assoc ( array $array1 , array $array2 [, array $... ] ) : array
array_intersect_assoc() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意和 array_intersect() 不同的是键名也用于比较。
参数
array1
要检查的主值。
array2
要比较的数组。
...
要对比的数组变量的列表。
返回值
返回数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。
范例
示例 #1 array_intersect_assoc() 例子
"green", "b" = "brown", "c" = "blue", "red");
$array2 = array("a" = "green", "b" = "yellow", "blue", "red");
$result_array = array_intersect_assoc($array1, $array2);
print_r($result_array);
?
PHP两个数组的交集?
你这个搞得是不是太复杂了。请使用array_diff比较数组,返回不同,再计算交集。
PHP高手请进。把一个三维数组里的所有二维数组取出来比较,取交集...
//foreach三维,一步步算下去就行
$arr = array(
array('a'='1','b'='2','c'='5','d'='56'),
array('a'='1','c'='5','d'='56'),
array('a'='1','c'='5','e'='44'),
array('a'='1','c'='5','d'='56','f'='d')
);
if (count($arr)0)
{
foreach($arr as $key=$val)
{
if ($key==0)//第一个先取出来
{
$tmp_arr = $val;
}
else
{
$tmp_arr = array_intersect_assoc($tmp_arr,$val);
}
}
}
print_r($tmp_arr);
php 如何写一个取一维数组交集的公共方法
array_intersect
(PHP 4 = 4.0.1, PHP 5)
array_intersect -- 计算数组的交集说明
array array_intersect ( array array1, array array2 [, array ...])
array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。
例子 1. array_intersect() 例子
?php
$array1 = array ("a" = "green", "red", "blue");
$array2 = array ("b" = "green", "yellow", "red");
$result = array_intersect ($array1, $array2);
?
这使得 $result 成为:
Array
(
[a] = green
[0] = red
)
注: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。
array_diff
(PHP 4 = 4.0.1, PHP 5)
array_diff -- 计算数组的差集说明
array array_diff ( array array1, array array2 [, array ...])
array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
例子 1. array_diff() 例子
?php
$array1 = array ("a" = "green", "red", "blue", "red");
$array2 = array ("b" = "green", "yellow", "red");
$result = array_diff ($array1, $array2);
?
这使得 $result 成为 array (1 = "blue");。在 $array1 中多次出现的值同样对待。
注: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。
注: 注意此函数仅检查多维数组中的一维。当然你可以用 array_diff($array1[0], $array2[0]); 检查更深的维度。
array_diff_assoc -- 带索引检查计算数组的差集
说明
array array_diff_assoc ( array array1, array array2 [, array ...])
array_diff_assoc() 返回一个 array,返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意和 array_diff() 不同的是键名也用于比较。
例子 1. array_diff_assoc() 例子
?php
$array1 = array ("a" = "green", "b" = "brown", "c" = "blue", "red");
$array2 = array ("a" = "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
?
上面的例子中可以看到键值对 "a" = "green" 在两个数组中都有,因此不在本函数的输出中。与此不同,键值对 0 = "red" 出现在输出中是因为第二个参数中的 "red" 的键名是 1。
键值对 key = value 中的两个值仅在 (string) $elem1 === (string) $elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。