我有两个我想比较的二维数组:
$array1
Array
(
[0] => Array
(
[A] => GB
[B] => Harry
[C] => British Army
[D] => Eton College
[E] => Cressida Bonas
)
[1] => Array
(
[A] => GB
[B] => William
[C] => Royal Air Force
[D] => Eton College
[E] => Catherine Middleton
)
)
$array2
Array
(
[0] => Array
(
[A] => GB
[B] => Harry
[C] => British Army
[D] => Eton College
[E] => Cressida Bonas
)
[1] => Array
(
[A] => GB
[B] => James
[C] => British Army
[D] => Millfield
[E] => Unknown
)
)
如果任何子数组值不同,则按如下方式生成布尔值true / false结果数组:
$results_array
Array
(
[0] => Array
(
[0] => true
)
[1] => Array
(
[0] => false
)
)
更新 两个数组总是具有相同长度的父数组(但子数组值的长度可能不同)。
我无法理解如何以递归方式使用foreach
来获取结果数组。
任何一般性的想法或建议?
答案 0 :(得分:0)
我不知道你试图用foreach
循环做什么。你是说每个数组都有2 child arrays
,或者每个子数组都有5 values
?无论如何,我希望这能帮到你!
我会使用其中一些:
array_intersect
array_intersect_assoc
array_diff
array_diff_assoc
代码:
<?php
$array1 = [
[
'A' => 'GB',
'B' => 'Harry',
'C' => 'British Army',
'D' => 'Eton College',
'E' => 'Cressida Bonas',
],
[
'A' => 'GB',
'B' => 'William',
'C' => 'Royal Air Force',
'D' => 'Eton College',
'E' => 'Catherine Middleton',
]
];
// What Values are in common
$result1 = array_intersect_assoc($array1[0], $array1[1]);
print_r($result1);
$array2 = [
[
'A' => 'GB',
'B' => 'Harry',
'C' => 'British Army',
'D' => 'Eton College',
'E' => 'Cressida Bonas',
],
[
'A' => 'GB',
'B' => 'James',
'C' => 'British Army',
'D' => 'Millfield',
'E' => 'Unknown',
]
];
// What values are different
$result2 = array_diff_assoc($array2[0], $array2[1]);
print_r($result2);
// A Way to check numerically
$perfectMatch = 5;
$intersect = array_intersect_assoc($array1[0], $array1[1]);
$intersectCount = count($intersect);
if ($intersectCount != $perfectMatch) {
echo "<br> Not Every value matches.";
} else {
echo "<br> Perfect Match!";
}
要比较完整的数组$array1
和$array2
,您可以这样做:
<?php
// (With array code above)
$c1 = count($array1);
$c2 = count($array2);
if ($c1 != $c2) {
echo "<br>Array Children must be the same";
}
$result = [];
for ($i = 0; $i < $c1; $i++) {
$in_common = array_intersect($array1[$i], $array2[$i]);
$result[] = count($intersect);
}
print_r($result);
答案 1 :(得分:0)
您可以使用==
运算符。将第一个数组作为键数组传递($k=>$arr
)[因为该值是另一个数组]。现在使用简单的==
比较运算符比较两个数组。您甚至可以使用===
运算符执行严格匹配。
<?php
$arr1=array(0=>array('A'=>'GB','B'=>'Harry','C'=>'British Army'),1=>array('A'=>'GB','B'=>'William','C'=>'Royal Air Force'));
$arr2=array(0=>array('A'=>'GB','B'=>'Harry','C'=>'British Army'),1=>array('A'=>'GB','B'=>'James','C'=>'British Army'));
foreach($arr1 as $k=>$arr)
{
$resarr[][$k]=($arr==$arr2[$k])? "true" : "false";
}
print_r($resarr);
<强> OUTPUT :
强>
Array
(
[0] => Array
(
[0] => true
)
[1] => Array
(
[1] => false
)
)
答案 2 :(得分:0)
您可以使用array_map()
,假设两个数组的长度相同:
$result = array_map(function($a, $b) {
return [$a == $b]; // create single element boolean array
}, $array1, $array2);
您可以使用==
或===
;如果两个数组具有相同的键和值对,则前者(==
)将产生true
,而后者(===
)仅在两者的键都产生true
时产生{{1}}数组的顺序也一样。
答案 3 :(得分:0)
有些答案使用==运算符;但是,如果数组没有相同的key =&gt;值匹配,则无效;试试这个:
$results = array();
foreach ($array1 as $i => $subarray)
{
/* No need to proceed if subarray[i] does not exist in the second array */
if(!is_array($array2[$i]))
{
$results[$i] = false;
continue;
}
$results[$i] = (count(array_diff($array1[$i], $array2[$i])) == 0) ? true : false;
}
此解决方案比使用==比较运算符慢一点。但是,使用==将不适用于以下情况:
$array1 => array(1 => "John", 2 => "James");
$array2 => array(1 => "James", 2 => "John");
此处,键不相同,但值是重复的。使用==的解决方案在比较这些数组时将返回false。
$array1 == $array2 // False