没有内置函数如何找到两个数组中的差异

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);

输出:https://3v4l.org/8CuS8

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);