比较两个数组和回声差异

时间:2014-04-30 19:02:59

标签: php

这段代码有什么问题?我尝试使用array_udiff但没有成功。

<?php
#I want to echo values of $paths1 that do not appear (even partially) on $paths2.

$paths1 = array('one', 'two', 'three');
$paths2 = array('twenty one', 'twenty two');

foreach ($paths1 as $path1)
    {
    foreach ($paths2 as $path2)
        {
        if (stripos($path1, $path2) == False)
            {
            echo $path1 . "<br>";
            break;
            }
        }
    echo "<br>";
    }
?>

2 个答案:

答案 0 :(得分:3)

  1. 您需要使用stripos() === false,就好像它们匹配一样,它会返回0,这是==到false

  2. 您的参数混合在一起,应为stripos($path2, $path1)

  3. 您需要检查$paths2中的所有值,直到找到它所在的值。您说它在第一个$paths2之后没有找到它。在$flag = true;循环之间设置foreach()的标记。如果$flag == false,请设置stripos($path2, $path1) !== false,而不是在第二个foreach中回显。在第二个循环结束后,但在第一个循环结束之前,输出$flag == false

  4. foreach ($paths1 as $path1)
    {
        $flag = true;
        foreach ($paths2 as $path2)
        {
             if (stripos($path2, $path1) !== false)
             {
                 $flag = false;
                 break;
             }
        }
        if($flag)
            echo $path1;
    }
    

    注意:没有测试,但应该可以工作。

答案 1 :(得分:1)

stripos的论据是倒退的。而不是:

if (stripos($path1, $path2) == False)

你想:

if (stripos($path2, $path1) === false)