php - 比较数组不打印差异

标签 php arrays sorting

这是我的测试代码:

$a = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"21");

$b = array("Peter"=>"35", "Ben"=>"21", "Joe"=>"43");

function leo_array_diff($a, $b) {
    $map = array();
    foreach($a as $val) $map[$val] = 1;
    foreach($b as $val) unset($map[$val]);
    return array_keys($map);
}

print_r(leo_array_diff($a, $b));

echo "<br>";

print_r(array_diff($a, $b));

这是它打印出来的内容:

Array ( [0] => 37 ) 
Array ( [Ben] => 37 )

我将引用 leo_array_diff() 函数:

第一个问题:

如您所见,Peter 是同一个号码,所以很好。 $a ben 和 $b ben 是不同的。 $a$b joe 是不同的。但这只是表明本不同。

也许是因为 $a joe 21 与 $b ben 是 21 相同?我怎样才能改变这一点? peter需要与peter对应,ben需要与ben对应,等等...

第二个问题:

Ben 是不同的,是的,因为 37 和 21 但在 print_r 中,它只显示 Array ( [0] => 37 )。我怎样才能让它显示Array ([0] => 21)?如何编辑函数而不在调用函数时交换参数?

最佳答案

首先你对array_diff有一个误解.

Returns an array containing all the entries from array1 that are not present in any of the other arrays.

它不会返回索引 Joe,因为值 21 位于第一个数组中。

现在,为什么你的函数不起作用?好吧,让我们一步一步来。

这是第一次 foreach 后 map 的样子:

array(
    '35' => '1',
    '37' => '1',
    '21' => '1'
)

然后,在第二个 foreach 中,您将循环遍历数组并删除值匹配的键。所以基本上,您要删除索引 35 和索引 21,这就是为什么只保留索引 37。 这里真正的问题是因为您没有在任何地方检查名称

这是您的函数的替代方案:

function leo_array_diff($a, $b) {

    $map = array();

    foreach($a as $name => $value){

        // The name is not found in the second array
        // Or the value is different from the first array
        if(!isset($b[$name]) || $b[$name] != $value)
            $map[$value] = 1;

    }

    return array_keys($map);

}

var_dump 将是:

array(2) {
    [0]=>
        int(37)
    [1]=>
        int(21)
}

关于php - 比较数组不打印差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42166487/

相关文章:

javascript - dygraphs 标签数量与数组中的列数不匹配

php - 在 PHP 中使用 mysql 数组数据

javascript - 如何使用突变对 Vuex 状态中的数据进行排序

javascript - 递归选择排序(JS)

php - 在已售订阅计数期间计算续订

php - 使用 Ajax 将 JSON 发送到服务器端

php - 未定义索引 : usersJSON on line 6 []

c - 使用 C 识别等差

java - 第 103 行的 fatal error : Call to undefined function iconv_substr() in/home/foodpack/public_html/app/code/core/Mage/Core/Helper/String. php

php - 404 未找到 nginx/1.10.3 (Ubuntu)