在PHP中求數(shù)組的交集,我們可以與PHP給我們提供的現(xiàn)成函數(shù):array_intersect(),其用法格式為:
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供興安網(wǎng)站建設、興安做網(wǎng)站、興安網(wǎng)站設計、興安網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、興安企業(yè)網(wǎng)站模板建站服務,十多年興安做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。
array array_intersect(array array1,array array2[,arrayN…])
根據(jù)上述的語法格式,我們來寫一個例子:
1 ?php
2 $fruit1 = array("Apple","Banana","Orange");
3 $fruit2 = array("Pear","Apple","Grape");
4 $fruit3 = array("Watermelon","Orange","Apple");
5 $intersection = array_intersect($fruit1, $fruit2, $fruit3);
6 print_r($intersection);
7 // 輸出結果:
8 // Array ( [0] = Apple )
9 ?
本例子將返回在$fruit1數(shù)組中出現(xiàn)且在$fruit2和$fruit3中也出現(xiàn)的所有水果的名子。
使用array_intersect()函數(shù)時要注意:只有在兩個元素相等且具有相同的數(shù)據(jù)類型時,array_intersect()函數(shù)才會認
為它們是相同的,否則不能進行交集計算。array_intersect()函數(shù)返回一個保留了鍵的數(shù)組,只由第一個數(shù)組中出現(xiàn)的且在其它數(shù)組中都出現(xiàn)的
值組成。
若要求關聯(lián)數(shù)組的交集,請使用array_intersect_assoc()函數(shù),給你個簡單的例子:
1 ?php
2 $fruit1 = array("red"="Apple","yellow"="Banana","orange"="Orange");
3 $fruit2 = array("yellow"="Pear","red"="Apple","purple"="Grape");
4 $fruit3 = array("green"="Watermelon","orange"="Orange","red"="Apple");
5 $intersection = array_intersect_assoc($fruit1, $fruit2, $fruit3);
6 print_r($intersection);
7 // 輸出:
8 // Array ( [red] = Apple )
9 ?
array_intersect_assoc()函數(shù)語法格式如下:
array array_intersect_assoc(array array1,array array2[,arrayN…])
array_intersect_assoc()與array_intersect()基本相同,只不過他在比較中還考慮了數(shù)組的鍵。因此,只有在第一個數(shù)組中出現(xiàn),且在所有其他輸入數(shù)組中也出現(xiàn)的鍵/值對才返回到結果數(shù)組中。
array_intersect
(PHP 4 = 4.0.1, PHP 5)
array_intersect -- 計算數(shù)組的交集說明
array array_intersect ( array array1, array array2 [, array ...])
array_intersect() 返回一個數(shù)組,該數(shù)組包含了所有在 array1 中也同時出現(xiàn)在所有其它參數(shù)數(shù)組中的值。注意鍵名保留不變。
例子 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 -- 計算數(shù)組的差集說明
array array_diff ( array array1, array array2 [, array ...])
array_diff() 返回一個數(shù)組,該數(shù)組包括了所有在 array1 中但是不在任何其它參數(shù)數(shù)組中的值。注意鍵名保留不變。
例子 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 中多次出現(xiàn)的值同樣對待。
注: 兩個單元僅在 (string) $elem1 === (string) $elem2 時被認為是相同的。也就是說,當字符串的表達是一樣的時候。
注: 注意此函數(shù)僅檢查多維數(shù)組中的一維。當然你可以用 array_diff($array1[0], $array2[0]); 檢查更深的維度。
array_diff_assoc -- 帶索引檢查計算數(shù)組的差集
說明
array array_diff_assoc ( array array1, array array2 [, array ...])
array_diff_assoc() 返回一個 array,返回一個數(shù)組,該數(shù)組包括了所有在 array1 中但是不在任何其它參數(shù)數(shù)組中的值。注意和 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" 在兩個數(shù)組中都有,因此不在本函數(shù)的輸出中。與此不同,鍵值對 0 = "red" 出現(xiàn)在輸出中是因為第二個參數(shù)中的 "red" 的鍵名是 1。
鍵值對 key = value 中的兩個值僅在 (string) $elem1 === (string) $elem2 時被認為相等。也就是說使用了嚴格檢查,字符串的表達必須相同。
你這個搞得是不是太復雜了。請使用array_diff比較數(shù)組,返回不同,再計算交集。
//foreach三維,一步步算下去就行¥arr = array(array('a'=>'1'ycg'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?。╟ount(¥arr)>0){ foreach(¥arr as?。ey=>¥val)?。鹖f?。ǎey==0)//第一個先取出來{?。mp_arr?。健。al;}else{?。mp_arr?。健rray_intersect_assoc(¥tmp_arr,¥val);} }}print_r(¥tmp_arr);
PHP數(shù)組的幾個操作,求并集,交集,差集,數(shù)組與字符串的相互轉換及數(shù)組去重
在php中如果我想要對兩個數(shù)組進行如并集、交集和差集操作,我們可直接使用php自帶的函數(shù)來操作如array_merge(),array_intersect(),array_diff().
計算數(shù)組的合并 array_merge與“+”的區(qū)別
array_merge() 函數(shù)把兩個或多個數(shù)組合并為一個數(shù)組。
如果鍵名有重復,該鍵的鍵值為最后一個鍵名對應的值(后面的覆蓋前面的),如果數(shù)組是數(shù)字索引的,則鍵名會以連續(xù)方式重新索引。
注釋:如果僅僅向 array_merge() 函數(shù)輸入了一個數(shù)組,且鍵名是整數(shù),則該函數(shù)將返回帶有整數(shù)鍵名的新數(shù)組,其鍵名以 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
)
要合并的兩個數(shù)組中有相同的字符串鍵的時候,使用array_merge()會覆蓋掉原來的值,而使用“+”合并數(shù)組則會和用“+”號合并數(shù)組相同數(shù)字鍵一樣把最先出現(xiàn)的值作為最終結果返回,如下例:
$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合并兩個數(shù)組,返回結果可能還會有相同的元素,這時候可以用array_unique()把相同的元素去掉
計算數(shù)組的交集
array_intersect() 函數(shù)返回兩個或多個數(shù)組的交集數(shù)組,結果數(shù)組包含了所有在被比較數(shù)組中,也同時出現(xiàn)在所有其他參數(shù)數(shù)組中的值,鍵名保留不變,注釋:僅有值用于比較,代碼如下:
$a = array('jpg','png','gif','bmp');
$b = array('JPG','txt','docx','bmp');
$intersection = array_intersect($a, $b);
還可以通過函數(shù),獲取自己想要的(比如元素不區(qū)分大小寫),代碼如下:
$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
)
計算數(shù)組的差集,代碼如下:
$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
)
也可以用函數(shù)先進行處理,再計算差集
array_diff() 函數(shù)返回兩個數(shù)組的差集數(shù)組。該數(shù)組包括了所有在被比較的數(shù)組中,但是不在任何其他參數(shù)數(shù)組中的鍵值,在返回的數(shù)組中,鍵名保持不變。
語法:array_diff(array1,array2,array3...)
代碼如下:
$difference = array_diff(array_map('strtolower',$old),
array_map('strtolower',$new));
數(shù)組轉換為字符串:
?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?
字符串轉換為數(shù)組:
?php
$str="1432532 ,4444";
$arr = explode(",",$str);
echo count($arr)."/br";
print_r($arr);
?
數(shù)組元素值去重
?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獲取兩個數(shù)據(jù)的交集,php求數(shù)組交集
文章來源:http://sd-ha.com/article4/dseccie.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、小程序開發(fā)、品牌網(wǎng)站制作、網(wǎng)站設計、移動網(wǎng)站建設、微信公眾號
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)