[英]find unique array from 2 array in php
我的 php 代碼中有 2 個數組
$array_1 = array(
array('id'=>1, 'roll'=>145),
array('id'=>2, 'roll'=>14),
array('id'=>5, 'roll'=>1),
)
第二個數組
$array_2 = array(
array('id'=>1, 'roll'=>145, 'name'=>'A'),
array('id'=>4, 'roll'=>189, 'name'=>'B'),
array('id'=>5, 'roll'=>1, 'name'=>'C'),
array('id'=>3, 'roll'=>744, 'name'=>'D'),
)
預期結果
$outcome = array(
array('id'=>4, 'roll'=>189, 'name'=>'B'),
array('id'=>3, 'roll'=>744, 'name'=>'D'),
);
嘗試了這些方法,但它們不起作用
要根據id
和roll
的組合查找 2 個數組的第二個數組中不存在的所有行,您可以創建一個關聯數組,它將所有 ID 作為鍵保存,並且 intern 有它自己的數組,其中鍵是它的卷號。
下面是示例數組的示例及其關聯數組(比如$map
)的樣子:
$array_1 = array(
array('id'=> 1, 'roll'=> 145),
array('id'=> 2, 'roll'=> 14),
array('id'=> 5, 'roll'=> 1),
);
Array
(
[1] => Array
(
[145] => 1
)
[2] => Array
(
[14] => 1
)
[5] => Array
(
[1] => 1
)
)
現在,您可以遍歷第二個數組並使用isset
函數檢查並收集所有不滿足isset
條件的結果。
片段:
<?php
$array_1 = array(
array('id'=> 1, 'roll'=> 145),
array('id'=> 2, 'roll'=> 14),
array('id'=> 5, 'roll'=> 1),
);
$array_2 = array(
array('id'=> 1, 'roll'=> 145, 'name'=>'A'),
array('id'=> 4, 'roll'=> 189, 'name'=>'B'),
array('id'=> 5, 'roll'=> 1, 'name'=>'C'),
array('id'=> 3, 'roll'=> 744, 'name'=>'D'),
);
$map = [];
foreach($array_1 as $curr_data){
if(!isset($map[$curr_data['id']])) $map[$curr_data['id']] = [];
$map[$curr_data['id']][$curr_data['roll']] = true;
}
$result = [];
foreach($array_2 as $curr_data){
if(!isset($map[$curr_data['id']],$map[$curr_data['id']][$curr_data['roll']])) $result[] = $curr_data;
}
print_r($result);
演示: https ://3v4l.org/kUshn
只需在in_array() 、 array_column()和unset()函數的幫助下使用下一個foreach
循環:
foreach($array_2 as $ind => $ar){
if (in_array($ar['id'],array_column($array_1,'id'))) unset($array_2[$ind]);
}
sort($array_2);
如果你想檢索基於相同id
的結果數組並roll
使用下一個foreach
循環:
foreach($array_2 as $ind => $ar){
if (in_array($ar['id'],array_column($array_1,'id')) &&
in_array($ar['roll'],array_column($array_1,'roll'))) unset($array_2[$ind]);
}
sort($array_2);
根據您的示例,如果我們通過 id(使用 array_column)重新索引每個數組,然后找到鍵之間的差異,我們將得到您想要的答案:
<?php
$array_1 = array(
array('id'=>1, 'roll'=>145),
array('id'=>2, 'roll'=>14),
array('id'=>5, 'roll'=>1),
);
$array_2 = array(
array('id'=>1, 'roll'=>145, 'name'=>'A'),
array('id'=>4, 'roll'=>189, 'name'=>'B'),
array('id'=>5, 'roll'=>1, 'name'=>'C'),
array('id'=>3, 'roll'=>744, 'name'=>'D'),
);
$out = array_diff_key(
array_column($array_2, null, 'id'),
array_column($array_1, null, 'id')
);
var_export($out);
輸出:
array (
4 =>
array (
'id' => 4,
'roll' => 189,
'name' => 'B',
),
3 =>
array (
'id' => 3,
'roll' => 744,
'name' => 'D',
),
)
如果你想使用array_values($out)
,你可以重新索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.