[英]difference between two arrays
我有以下兩個arrays。我想要這兩個arrays之間的區別。也就是說,我如何找到兩個arrays中不存在的值?
$array1=Array ( [0] => 64 [1] => 98 [2] => 112 [3] => 92 [4] => 92 [5] => 92 ) ;
$array2=Array ( [0] => 3 [1] => 26 [2] => 38 [3] => 40 [4] => 44 [5] => 46 [6] => 48 [7] => 52 [8] => 64 [9] => 68 [10] => 70 [11] => 72 [12] => 102 [13] => 104 [14] => 106 [15] => 92 [16] => 94 [17] => 96 [18] => 98 [19] => 100 [20] => 108 [21] => 110 [22] => 112);
要獲得兩個 arrays 之間的區別,您需要執行以下操作:
$fullDiff = array_merge(array_diff($array1, $array2), array_diff($array2, $array1));
原因是array_diff()
只會為您提供$array1
而不是$array2
中的值,而不是相反。 以上會給你們兩個。
注意:此答案將返回$array1
中不存在的$array2
中的值,它不會返回$array1
中不存在的$array2
中的值。
$diff = array_diff($array2, $array1);
如果你想遞歸地得到 arrays 之間的差異,試試這個 function:
function arrayDiffRecursive($firstArray, $secondArray, $reverseKey = false)
{
$oldKey = 'old';
$newKey = 'new';
if ($reverseKey) {
$oldKey = 'new';
$newKey = 'old';
}
$difference = [];
foreach ($firstArray as $firstKey => $firstValue) {
if (is_array($firstValue)) {
if (!array_key_exists($firstKey, $secondArray) || !is_array($secondArray[$firstKey])) {
$difference[$oldKey][$firstKey] = $firstValue;
$difference[$newKey][$firstKey] = '';
} else {
$newDiff = arrayDiffRecursive($firstValue, $secondArray[$firstKey], $reverseKey);
if (!empty($newDiff)) {
$difference[$oldKey][$firstKey] = $newDiff[$oldKey];
$difference[$newKey][$firstKey] = $newDiff[$newKey];
}
}
} else {
if (!array_key_exists($firstKey, $secondArray) || $secondArray[$firstKey] != $firstValue) {
$difference[$oldKey][$firstKey] = $firstValue;
$difference[$newKey][$firstKey] = $secondArray[$firstKey];
}
}
}
return $difference;
}
測試:
$differences = array_replace_recursive(
arrayDiffRecursive($firstArray, $secondArray),
arrayDiffRecursive($secondArray, $firstArray, true)
);
var_dump($differences);
<?php
function getArrayDiff($a1, $a2) {
$result = array();
print_r($a1);
print_r($a2);
// If First Array is Bigger than Second
if( count($a1) > count($a2) ) {
$result=array_diff($a1,$a2);
}
// If Second Array is Bigger than First
if( count($a1) < count($a2) ) {
$result=array_diff($a2,$a1);
}
// If Both array are same but, data values are different.
else
{
$result = array_merge (array_diff($a2,$a1), array_diff($a1,$a2));
}
return $result;
}
print "<pre>";
// First Array is Big
echo "First Array is Big <br/>";
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");
print_r( getArrayDiff($a1, $a2) );
// Second Array is Big
echo "Second Array is Big <br/>";
$a1=array("e"=>"red","f"=>"green","g"=>"blue");
$a2=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
print_r( getArrayDiff($a1, $a2) );
// Both Array are same
echo "Both Array are same <br/>";
$a1=array("a"=>"red","b"=>"green","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");
print_r( getArrayDiff($a1, $a2) );
?>
Output:
First Array is Big
Array
(
[a] => red
[b] => green
[c] => blue
[d] => yellow
)
Array
(
[e] => red
[f] => green
[g] => blue
)
Array
(
[d] => yellow
)
Second Array is Big
Array
(
[e] => red
[f] => green
[g] => blue
)
Array
(
[a] => red
[b] => green
[c] => blue
[d] => yellow
)
Array
(
[d] => yellow
)
Both Array are same
Array
(
[a] => red
[b] => green
[d] => yellow
)
Array
(
[e] => red
[f] => green
[g] => blue
)
Array
(
[g] => blue
[d] => yellow
)
如果您要使用array_diff()
。
要記住的是論點的書寫順序。
PHP 文檔: array_diff
# array_diff(1, 2)
array_diff($one, $two);
# array_diff(2, 1)
array_diff($two, $one); // produces different result.
$numbers = range(000000, 999999);
$numbers = array_map(function ($n) {
if (strlen($n) < 6) {
$addZero = 6 - strlen($n);
$appendZero = str_repeat('0', $addZero);
$n = $appendZero . $n;
}
return $n;
}, $numbers);
$allRanges = array_diff($numbers, $getAllPurchasedTicketsArr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.