没有内置函数如何找到两个数组中的差异
Without built-in functions how to find differences in two arrays
我必须为两个数组找到 difference
,我试过了,但我没有得到我的 expected.can 请你帮忙。
<?php
$firstArray = array(3,4,5,6);
$secondArray = array(4, 5);
$outputArray = array();
foreach($firstArray as $firstArrayItem) {
foreach($secondArray as $secondArrayItem) {
if($firstArrayItem != $secondArrayItem) {
$outputArray[] = $firstArrayItem;
}
}
}
print_r($outputArray);
Expected output
[3,6]
注意:我们不应该使用 PHP 内置函数。
a) 使用布尔值检查:
<?php
$firstArray = array(3,4,5,6);
$secondArray = array(4, 5);
$outputArray = array();
foreach($firstArray as $firstArrayItem) {
$found = false;
foreach($secondArray as $secondArrayItem) {
if($firstArrayItem == $secondArrayItem) {
$found = true;
}
}
if($found == false){
$outputArray[] = $firstArrayItem;
}
}
print_r($outputArray);
b) 另一种使用 for()
循环的方法:https://3v4l.org/9JZrW
$firstArray = array(3,4,5,6);
$secondArray = array(4, 5, 7);
$outputArray = diffArray($firstArray, $secondArray);
$outputArray = diffArray($secondArray, $firstArray, $outputArray);
function diffArray($arr1, $arr2, $result = array()) {
foreach($arr1 as $arr11) {
$isExist = false;
foreach($arr2 as $arr22) {
if($arr11 === $arr22) {
$isExist = true;
}
}
if(!$isExist) $result[] = $arr11;
}
return $result;
}
print_r($outputArray);
这是一个解决方案,在交换输入数组时不会给出不同的结果。
所以它会给出相同的结果:
$firstArray = array(3, 4, 5, 6);
$secondArray = array(4, 5);
这个:
$firstArray = array(4, 5);
$secondArray = array(3, 4, 5, 6);
此外,它会按如下方式处理重复值:
$firstArray = array(4, 4, 4);
$secondArray = array(3, 4, 6);
我希望输出为:
array(3, 4, 4, 6) // Only one 4 is common and should be excluded.
具有此行为的代码可以是(除了 print_r
之外没有内置函数):
$assoc = [];
foreach($firstArray as $value) {
$assoc[$value][] = 1;
}
foreach($secondArray as $value) {
$assoc[$value][] = -1;
}
foreach($assoc as $value => $list) {
$count = 0;
foreach($list as $delta) $count += $delta;
for($i = $count > 0 ? $count : -$count; $i > 0; $i--) {
$result[] = $value;
}
}
print_r($result);
我必须为两个数组找到 difference
,我试过了,但我没有得到我的 expected.can 请你帮忙。
<?php
$firstArray = array(3,4,5,6);
$secondArray = array(4, 5);
$outputArray = array();
foreach($firstArray as $firstArrayItem) {
foreach($secondArray as $secondArrayItem) {
if($firstArrayItem != $secondArrayItem) {
$outputArray[] = $firstArrayItem;
}
}
}
print_r($outputArray);
Expected output
[3,6]
注意:我们不应该使用 PHP 内置函数。
a) 使用布尔值检查:
<?php
$firstArray = array(3,4,5,6);
$secondArray = array(4, 5);
$outputArray = array();
foreach($firstArray as $firstArrayItem) {
$found = false;
foreach($secondArray as $secondArrayItem) {
if($firstArrayItem == $secondArrayItem) {
$found = true;
}
}
if($found == false){
$outputArray[] = $firstArrayItem;
}
}
print_r($outputArray);
b) 另一种使用 for()
循环的方法:https://3v4l.org/9JZrW
$firstArray = array(3,4,5,6);
$secondArray = array(4, 5, 7);
$outputArray = diffArray($firstArray, $secondArray);
$outputArray = diffArray($secondArray, $firstArray, $outputArray);
function diffArray($arr1, $arr2, $result = array()) {
foreach($arr1 as $arr11) {
$isExist = false;
foreach($arr2 as $arr22) {
if($arr11 === $arr22) {
$isExist = true;
}
}
if(!$isExist) $result[] = $arr11;
}
return $result;
}
print_r($outputArray);
这是一个解决方案,在交换输入数组时不会给出不同的结果。
所以它会给出相同的结果:
$firstArray = array(3, 4, 5, 6);
$secondArray = array(4, 5);
这个:
$firstArray = array(4, 5);
$secondArray = array(3, 4, 5, 6);
此外,它会按如下方式处理重复值:
$firstArray = array(4, 4, 4);
$secondArray = array(3, 4, 6);
我希望输出为:
array(3, 4, 4, 6) // Only one 4 is common and should be excluded.
具有此行为的代码可以是(除了 print_r
之外没有内置函数):
$assoc = [];
foreach($firstArray as $value) {
$assoc[$value][] = 1;
}
foreach($secondArray as $value) {
$assoc[$value][] = -1;
}
foreach($assoc as $value => $list) {
$count = 0;
foreach($list as $delta) $count += $delta;
for($i = $count > 0 ? $count : -$count; $i > 0; $i--) {
$result[] = $value;
}
}
print_r($result);