比较&计算两个关联数组的匹配值 - PHP

时间:2016-09-30 17:41:07

标签: php comparison associative-array

我一直在研究比较两个关联数组,我只能以相当高的准确度进行比较。我已阅读S.O.上的所有类似主题。但是没有人解决或解决了我遇到的问题,也就是说,在比较两个关联数组时,测试数据将成功显示相应的匹配,但是当我尝试计算匹配值的数量时,我得到了一些奇怪的结果。

编辑:

<?php
$data    = array(
    'Alpha' => array(
        'peace' => 0,
        'art' => 1,
        'trend' => 0,
        'night' => 1,
        'shop' => 0
    ),
    'Beta' => array(
        'peace' => 1,
        'art' => 1,
        'trend' => 1,
        'night' => 1,
        'shop' => 0
    ),
    'Gamma' => array(
        'peace' => 0,
        'art' => 1,
        'trend' => 1,
        'night' => 1,
        'shop' => 0
    )
);
$choices = array(
    'peace' => 0,
    'art' => 1,
    'trend' => 0,
    'night' => 1,
    'shop' => 0
);
function compare($data, $choices)
{
    foreach ($data as $city => $name)
    {
        echo $city . '<br>';
        foreach ($name as $key => $value)
        {
            ($choices[$key] === $value) ? $match = 'match' : $match = 'no';
            ($choices[$key] === $value) ? $i++ : $i = 0;
            echo $key . ':' . $value . ':' . $choices[$key] . ':' . $match . '<br>';
        }
        echo 'Matches:' . $i . '<br><br>';
    }
}
compare($data, $choices);
?>

输出数据

Format of data is as follows
-----------------------------
name of key:$data value:$choices value:is match

Alpha
peace:0:0:match
art:1:1:match
trend:0:0:match
night:1:1:match
shop:0:0:match
Matches:5

Beta
peace:1:0:no
art:1:1:match
trend:1:0:no
night:1:1:match
shop:0:0:match
Matches:2

Gamma
peace:0:0:match
art:1:1:match
trend:1:0:no
night:1:1:match
shop:0:0:match
Matches:2

&#39;阿尔法&#39;应该返回5场比赛。 &#39;β&#39;应该返回3,它返回2。 &#39;伽玛&#39;应该返回4,它返回2.

非常感谢任何帮助。先感谢您。

1 个答案:

答案 0 :(得分:1)

问题是如何使用三元语句递增计数。当你这样做

($choices[$key] === $value) ? $i++ : $i = 0;

只要遇到不匹配,它就会$i重置为零

使用简单的条件代替应该给你正确的计数。

if ($choices[$key] === $value) $i++;

您可以在内部$i循环之前将0初始化为foreach