比较和计算两个关联数组的匹配值 - PHP
Comparing & Counting Matched Values of Two Associative Arrays - PHP
我一直在研究比较两个关联数组,我只能相当准确地完成这项工作。我已经阅读了 S.O 上所有类似的话题。但是 none 已经解决或解决了我遇到的问题,即在比较两个关联数组时,测试数据将成功显示适当的匹配项,但是当我尝试计算匹配值的数量时,我得到了一些奇怪的结果。
编辑:
<?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
'Alpha' 应该 return 5 场比赛,确实如此。
'Beta' 应该 return 3,它 returns 2。
'Gamma' 应该 return 4,它 returns 2.
如有任何帮助,我们将不胜感激。先感谢您。
问题在于您如何使用三元语句递增计数。当你这样做时
($choices[$key] === $value) ? $i++ : $i = 0;
它会在遇到不匹配时将$i
重置为零。
改用简单的条件应该会给你正确的计数。
if ($choices[$key] === $value) $i++;
您可以在内部 foreach
循环之前将 $i
初始化为 0
。
我一直在研究比较两个关联数组,我只能相当准确地完成这项工作。我已经阅读了 S.O 上所有类似的话题。但是 none 已经解决或解决了我遇到的问题,即在比较两个关联数组时,测试数据将成功显示适当的匹配项,但是当我尝试计算匹配值的数量时,我得到了一些奇怪的结果。
编辑:
<?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
'Alpha' 应该 return 5 场比赛,确实如此。 'Beta' 应该 return 3,它 returns 2。 'Gamma' 应该 return 4,它 returns 2.
如有任何帮助,我们将不胜感激。先感谢您。
问题在于您如何使用三元语句递增计数。当你这样做时
($choices[$key] === $value) ? $i++ : $i = 0;
它会在遇到不匹配时将$i
重置为零。
改用简单的条件应该会给你正确的计数。
if ($choices[$key] === $value) $i++;
您可以在内部 foreach
循环之前将 $i
初始化为 0
。