① php 判斷兩個數組是否有交集
在PHP中求數組的交集,我們可以與PHP給我們提供的現成函數:array_intersect(),其用法格式為:
array array_intersect(array array1,array array2[,arrayN…])
根據上述的語法格式,我們來寫一個例子:
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數組中出現且在$fruit2和$fruit3中也出現的所有水果的名子。
使用array_intersect()函數時要注意:只有在兩個元素相等且具有相同的數據類型時,array_intersect()函數才會認
為它們是相同的,否則不能進行交集計算。array_intersect()函數返回一個保留了鍵的數組,只由第一個數組中出現的且在其它數組中都出現的
值組成。
若要求關聯數組的交集,請使用array_intersect_assoc()函數,給你個簡單的例子:
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()函數語法格式如下:
array array_intersect_assoc(array array1,array array2[,arrayN…])
array_intersect_assoc()與array_intersect()基本相同,只不過他在比較中還考慮了數組的鍵。因此,只有在第一個數組中出現,且在所有其他輸入數組中也出現的鍵/值對才返回到結果數組中。
② php 求這樣的兩個數組的特殊交集,看似簡單其實不然
<?php
$result = array();
foreach($y as $value){
$result[] = array($value,test($x,$value));
}
function test($x,$b){
foreach($x as $value){
if($value[0] == $b)
return $value[1];
}
return 0;
}
?>
③ php如何遍歷交叉的多維數組並給其id和pid(父鍵id)
遍歷數組常用的函數為foreach(),具體要怎麼遍歷這個交叉數組,你要結合你自己的實際需要去遍歷了
④ 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 時被認為相等。也就是說使用了嚴格檢查,字元串的表達必須相同。
⑤ thinkphp 多維數組,如何轉成以為一維數組,然後寫入資料庫
$result=array();//新數組
foreach($dataas$vo){//$data是原數組
foreach($voas$k=>$v){
if($k!=='username'){
$temp=$v;
$temp['username']=$vo['username'];
array_push($result,$temp);
}
}
}
⑥ php中一個數組中嵌套一個數組
PHP中的 explode() 函數可以實現此功能語法 explode(separator,string,limit) 參數 描述 separator 必需,規定在哪裡分割字元串。 string 必需,要分割的字元串。 limit 可選,規定所返回的數組元素的數目。例如: 輸出如下: Array ( [0] => one [1] => two [2] => three [3] => four )
⑦ 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;$i<count($arr);$i++)
{
$str_u .=trim($arr[$i]).',';
}
echo $str_u;
?>
⑧ php 兩個一維數組交叉遍歷變二維
$a=array(1,2);
$b=array(20001,20002,20003);
$c=array();
for($i=0;$i<count($b);$i++){
for($j=0;$j<count($a);$j++){
array_push($c,array($a[$j],$b[$i]));
}
}
echo'<pre>';
print_r($c);
echo'</pre>';
效果圖
⑨ PHP兩個元素不相等的一維數組怎麼交替輸出 題目是數組$arr1,選項是數組$arr2(八個元素)
你的數據結構構造的不好,為什麼不做成二維數組
foreach ($arr2 as $idx => $ans) {
if ($idx % 4 == 0) {
echo $arr1[$idx], PHP_EOL;
}
echo $ans, PHP_EOL;
}