-
場景,需要將兩個二維數組進行比較,找出其中相同的元素
-
大體思路就是,先在兩個二維數組中找出相同主鍵相同的元素,再進行比較
-
在php文檔中的方法一般都是針對一維數組,這裏我們只能手動去處理二維數組
第一想法是循環去處理兩個數組,但是兩個數組循環起來有點不好寫 -
這裏使用將二維數組中的標識字段降成一維數組,再對一維數進行處理
<?php
function array_compare($array_1,$array_2){
$array_1 =[
['one'=>'aa','two'=>'bb'],
['one'=>'cc','two'=>'dd'],
['one'=>'rr','two'=>'fd'],
];
$array_2 =[
['aa'=>'cc','bb'=>'dd'],
['aa'=>'we','bb'=>'ff'],
['aa'=>'rer','bb'=>'gdf'],
['aa'=>'aa','bb'=>'cc']
];
$one_col = array_column($array_1,'one');
$two_col = array_column($array_2,'aa');//根據標識字段獲取一維數組,用於進行交集比較
$one_int = array_intersect($one_col,$two_col);
$two_int = array_intersect($two_col,$one_col);//分別交集比較獲取原數組的key,和標識字段
$two_index =[];
foreach ($one_int as $one_item){
array_push($two_index,array_search($one_item,$two_int));//根據標識字段,生成兩個對應原數組的key數組$one_index和$two_index
}
$one_index =array_keys($one_int);
$true_array =[];
for ($i=0;$i<count($one_index);$i++){//在原數組取數據進行比較
$one_data = $array_1[$one_index[$i]];
$two_data = $array_2[$two_index[$i]];
$diff = array_diff($one_data,$two_data);//數組差集,返回空數組時表示兩數組相等,適用於兩數組元素數量一致。
if (count($diff)<1){
array_push($true_array,$one_data);
}
}
return $true_array;
}
echo json_encode(array_compare('1','2'));
通過將兩個二維數組的主鍵字段降成兩個一維數組(注意數組會重新生成自然連續key),交集獲取對應的key,通過key獲取數組進行比較