2

我正在使用这段代码来比较两个 php 数组,我正确地得到了所有匹配的项目,但不幸的是我没有成功获得不匹配的项目。这是我的代码。

<?php 

$filter1 = "blueberries,abc,cornstarch,sugar";
$cval = strtoupper($filter1);         
$parts1 = explode(',',$cval);

$filter2 = "water,blueberries,sugar,cornstarch";
$values = strtoupper($filter2);
$parts2 = explode(',', $values);


$m=0;
$nm=0;


for($i = 0; $i< count($parts1); $i++)
{

for($j = 0; $j< count($parts2); $j++)
{

if($parts1[$i] == $parts2[$j])
{
$m++;
$p[] = $parts1[$i];
}
else{
$nm++;
$q[] = $parts1[$i];
}

}

}

echo $m;
echo "<br />";
echo $nm;
echo "<br />";
print_r($p);
echo "<br />";
print_r($q);

?>

有人可以帮我解决这个问题,因为我不想使用内置的数组比较函数。

4

4 回答 4

2

我会为此使用内部函数(如果我理解你的问题)

匹配:

$matched = array_intersect($parts1, $parts2);

区别:

$difference = array_diff($parts1, $parts2);

或者在你的 for 循环世界中:

<?php
    $filter1 = "blueberries,abc,cornstarch,sugar";
    $cval = strtoupper($filter1);
    $parts1 = explode(',', $cval);

    $filter2 = "water,blueberries,sugar,cornstarch";
    $values = strtoupper($filter2);
    $parts2 = explode(',', $values);

    $matched = $not_matched = array();

    for ($i = 0; $i < count($parts1); $i++)
    {

        if (in_array($parts1[$i], $parts2))
        {
            $matched[] = $parts1[$i];
        }
        else
        {
            $not_matched[] = $parts1[$i];
        }

    }

    print_r($matched);
    print_r($not_matched);
?>

我一直在努力添加另一个循环而不是使用 in_array() 但出于两个原因我不会更新我的答案。

1) 使用

$matched = array_intersect($parts1, $parts2);
$difference = array_diff($parts1, $parts2);

写这么多代码而不是两行代码是违反我的信仰的。

2)创建这么多代码严格不使用array_*in_array函数的唯一原因必须是为了一些测验或测试,我想进入并获胜。

于 2012-12-06T10:58:14.037 回答
1

你正在做两个数组的笛卡尔积。如果您发现 ,添加to$parts1[$i] == $parts2[$j]是正确的,但相反的假设(如果它们不同,则添加 to )是错误的。您应该从 in 中的所有元素开始,当您有匹配项时,将其添加到.$parts1[$i]$p$q$q$p$q

于 2012-12-06T11:04:52.390 回答
1
    <?php
    $array1 = array("a" => "green", "red", "blue", "red");
    $array2 = array("b" => "green", "yellow", "red");
    $result = array_diff($array1, $array2);

    print_r($result);
    ?>

这是 php 库函数。

于 2012-12-06T12:59:51.283 回答
1

使用 array_intersect、array_diff 和 array_merge

$filter1 = "blueberries,abc,cornstarch,sugar";
$cval = strtoupper($filter1);         
$parts1 = explode(',',$cval);

$filter2 = "water,blueberries,sugar,cornstarch";
$values = strtoupper($filter2);
$parts2 = explode(',', $values);

print_r(array_intersect($parts1, $parts2));

print_r(array_merge(array_diff($parts1, $parts2), array_diff($parts2, $parts1)));

数组([0] => BLUEBERRIES [2] => 玉米淀粉 [3] => SUGAR)数组([0] => ABC [1] => 水)

于 2012-12-06T11:00:49.853 回答