php将多维数组与不匹配的键进行比较并返回不匹配的值
阵列一:php将多维数组与不匹配的键进行比较并返回不匹配的值,php,multidimensional-array,Php,Multidimensional Array,阵列一: $arr1 = array( array("uid" => "cgajate"), array("uid" => "frankfurt9"), array("uid" => "ricoetc") ); 数组二: $arr2 = array( array("uxid" => "cgajate"), array("uxid" => "ricoetc
$arr1 = array(
array("uid" => "cgajate"),
array("uid" => "frankfurt9"),
array("uid" => "ricoetc")
);
数组二:
$arr2 = array(
array("uxid" => "cgajate"),
array("uxid" => "ricoetc"),
array("uxid" => "ricoetc1"),
array("uxid" => "frankfurt9"),
array("uxid" => "panterafan")
);
我有两个多维数组(正如您在上面看到的,对于id,uxid vs uid,不要共享相同的密钥名)。我试图在比较“uid”和“uxid”值的基础上找到不匹配的数组,我的预期结果是:
Array
(
[0] => Array
(
[uxid] => ricoetc1
)
[1] => Array
(
[uxid] => panterafan
)
)
下面是我的代码,我试图找到匹配的值并从结果数组中删除,但当我打印时给我空数组
$tmpArray = array();
foreach($arr1 as $data1) {
$duplicate = false;
foreach($arr2 as $data2) {
if($data1['uid'] === $data2['uxid']) $duplicate = true;
}
if($duplicate === false) $tmpArray[] = $data1;
}
echo "<pre>", print_r($tmpArray);
$tmpArray=array();
foreach($arr1作为$data1){
$duplicate=false;
foreach($arr2作为$data2){
如果($data1['uid']==$data2['uxid'])$duplicate=true;
}
如果($duplicate==false)$tmpArray[]=$data1;
}
回音“”,打印($tmpArray);
试试这个
$arr1=[
["uid"=>"cgajate"],
["uid"=>"frankfurt9"],
["uid"=>"ricoetc"]
];
$arr2=[
["uxid"=>"cgajate"],
["uxid"=>"ricoetc"],
["uxid"=>"ricoetc1"],
["uxid"=>"frankfurt9"],
["uxid"=>"panterafan"]
];
$diff2=array_diff(array_column($arr2,'uxid'),array_column($arr1,'uid'));
$result=array_map(function($v){return ['uxid'=> $v];},array_values($diff2));
var_export($result);
试试这个
$arr1=[
["uid"=>"cgajate"],
["uid"=>"frankfurt9"],
["uid"=>"ricoetc"]
];
$arr2=[
["uxid"=>"cgajate"],
["uxid"=>"ricoetc"],
["uxid"=>"ricoetc1"],
["uxid"=>"frankfurt9"],
["uxid"=>"panterafan"]
];
$diff2=array_diff(array_column($arr2,'uxid'),array_column($arr1,'uid'));
$result=array_map(function($v){return ['uxid'=> $v];},array_values($diff2));
var_export($result);
这可以做为一个大的丑陋的一行,我把它减半,以便于阅读。如果需要,可以将其进一步分解 代码:(演示:) 输出: 此方法:
- 从每个多维阵列生成一维阵列
- 比较值并保留
中不存在的$arr1
值$arr2
- 重新索引键
- 并将结果重新构造为所需的多维阵列结构
*此方法不执行迭代数组扫描。这可以作为一个大的丑陋的单行线来完成,为了便于阅读,我将其减半。如果需要,可以将其进一步分解 代码:(演示:) 输出: 此方法:
- 从每个多维阵列生成一维阵列
- 比较值并保留
中不存在的$arr1
值$arr2
- 重新索引键
- 并将结果重新构造为所需的多维阵列结构
*此方法不执行迭代数组扫描。可能重复的。是否还要查找不匹配的
uid
值?或者它们不存在吗?我会投票将其作为副本关闭,除非您要比较的阵列具有不同的键,因此使用array\u diff
解决方案并不明显。我可以建议您编辑您的问题以强调关键点不同的事实吗?此外,@mickmackusa的答案似乎最准确,因为他采用的方法是首先将问题转化为一个可以通过核心数组_diff
函数轻松解决的问题。是否还希望找到不匹配的uid
值?或者它们不存在吗?我会投票将其作为副本关闭,除非您要比较的阵列具有不同的键,因此使用array\u diff
解决方案并不明显。我可以建议您编辑您的问题以强调关键点不同的事实吗?另外,@mickmackusa的回答似乎最准确,因为他采取的方法是首先将问题转化为一个可以通过核心数组_diff
函数轻松解决的问题。你应该检查witch数组是否更大,因为如果你切换$arr1和$arr2的位置,你将不会得到结果…如果我正确阅读代码,你应该检查巫婆数组是否更大,因为如果你切换$arr1和$arr2的位置,你将不会得到结果…如果我正确阅读代码
array (
0 =>
array (
'uxid' => 'ricoetc1',
),
1 =>
array (
'uxid' => 'panterafan',
),
)