Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用循环比较PHP数组_Php - Fatal编程技术网

使用循环比较PHP数组

使用循环比较PHP数组,php,Php,我使用这段代码来比较两个php数组,我正确地获得了所有匹配项,但不幸的是,我没有成功地获得不匹配项。这是我的密码 <?php $filter1 = "blueberries,abc,cornstarch,sugar"; $cval = strtoupper($filter1); $parts1 = explode(',',$cval); $filter2 = "water,blueberries,sugar,cornstarch"; $values = strtou

我使用这段代码来比较两个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);

?>


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

我会使用内部函数来解决这个问题(如果我理解你的问题)

匹配:

$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);
?>
写这么多代码而不是两行是违反我的信仰的


2) 创建大量代码而不使用
array.*
in.\u array
函数的唯一原因必须是为了一些测验或测试,我想输入这些测验或测试并获胜。

使用array\u intersect、array\u diff和array\u 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]=>蓝莓[2]=>玉米淀粉[3]=>糖)数组([0]=>ABC[1]=>水)

你在做两个数组的笛卡尔积。 如果您发现
$parts1[$i]==$parts2[$j]
,将
$parts1[$i]
添加到
$p
是正确的,但相反的假设(如果它们不同,则添加到
$q
)是错误的。 您应该从
$q
中的所有元素开始,当您有匹配项时,将其添加到
$p
并将其从
$q
中删除
    <?php
    $array1 = array("a" => "green", "red", "blue", "red");
    $array2 = array("b" => "green", "yellow", "red");
    $result = array_diff($array1, $array2);

    print_r($result);
    ?>

这是php库函数。

使用
array\u interest
array\u diff
对不起,我想使用循环,谢谢。这就提出了一个问题,为什么要使用循环而不是内置函数?这太荒谬了,比较阵列后,需要再次执行for循环以比较其他阵列。停止对抗内置函数我猜数组()中的函数不是allowed@Dale啊…请在_array()中多使用一个循环…:P@NullPointer我有辞职的理由:)
    <?php
    $array1 = array("a" => "green", "red", "blue", "red");
    $array2 = array("b" => "green", "yellow", "red");
    $result = array_diff($array1, $array2);

    print_r($result);
    ?>