如何检查$ array1中的每个值是否存在于$ array2中

时间:2014-09-30 01:46:35

标签: php arrays

我已经知道问题的原因,而不是代码。
每行基值的字段内容分别为
因此使用str_replace删除了行

$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query[filed1]);
$array1 = str_replace("\n","",$array1);
$array2 = explode(",",$query[filed2]);
$array2 = str_replace("\n","",$array2);

foreach($array1 as $value)
{
    if (in_array($value,$array2))
    {
        //true
    }else{
        //false
    }
}

检查if Each value in $array2 is present in $array1 or not

时出现问题

表格数据:

filed1               | filed2
ahmed,jon,maya,omar  | omar,maya

我的代码:

$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query[filed1]);
$array2 = explode(",",$query[filed2]);

        $length = count($array1);
        for ($i = 0; $i < $length; $i++)
        {
            if (in_array($array1[$i] , $array2))
            {
                //true
            }else{
                //false
            }
        }

或者这个:

$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query[filed1]);
$array2 = explode(",",$query[filed2]);

foreach($array1 as $value)
{
    if (in_array($value,$array2))
    {
        //true
    }else{
        //false
    }
}

我的问题是我的代码不能正常工作,我确信我的查询也会给出结果和数组。

array1的输出:

Array ( [0] => maya [1] => omar [2] => ahmed [3] => join)

array2的输出:

Array ( [0] => omar [1] => maya )

那么,我的代码中的错误在哪里?!

注意:

我不想check all value from array2 are in array1,我想要check if Each value in $array2 is present in $array1 or not - 专注于这个词Each value而不是all value

像:

if (in_array('omar',$array1))
{
    echo 'found';
}else{
    echo 'not found'; }
    if (in_array('maya',$array1))
    {
        echo 'found';
    }else{
        echo 'not found';
    } 
    if (in_array('jon',$array1))
    { 
        echo 'found';
    }else{
        echo 'not found';
    }
etc ...

但我不想这样,我想把它放在一个循环中。

5 个答案:

答案 0 :(得分:2)

是的,你可以在这种情况下使用一个循环,如果你真的想要,一个简单的foreach就足够了:

$array1 = array_map('trim', $array1); // on explode make sure remove trailing/leading spaces
$array2 = array_map('trim', $array2);

foreach($array1 as $name) { // so each value of array1
    if(in_array($name, $array2)) { // is compared inside the contents of array2
        // if found
        echo "$name is found in " . '$array2';
    } else {
        echo "$name is NOT found in " . '$array2';
    }
}

答案 1 :(得分:0)

我认为你应该迭代array2,以便检查array2的所有值,而不是相反,因为你说:“

  

检查$ array2中的每个值...

$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query['filed1']);
$array2 = explode(",",$query['filed2']);

foreach($array2 as $value)
{
    if (in_array($value,$array1))
    {
        //true
    }else{
        //false
    }
}

答案 2 :(得分:0)

我已经知道问题的原因,而不是代码...... 每行基值的字段内容分别 因此使用str_replace删除了行

$query = $db->query_first("SELECT * FROM table ");
$array1 = explode(",",$query[filed1]);
$array1 = str_replace("\n","",$array1);
$array2 = explode(",",$query[filed2]);
$array2 = str_replace("\n","",$array2);

foreach($array1 as $value)
{
    if (in_array($value,$array2))
    {
        //true
    }else{
        //false
    }
}

答案 3 :(得分:0)

array_diff()是一种单函数方法,用于获取其他数组中不存在的项数组

$array1 = array('ahmed','jon','maya','omar');
$array2 = array('omar','maya');
$result = array_diff($array1,$array2); // Array ( [0] => ahmed [1] => jon )

您可能需要切换参数顺序才能达到预期效果。

您也可以使用array_intersect()执行反向

答案 4 :(得分:0)

@Ghost的解决方案产生了正确的输出,但正如您所说,您知道问题不是您的代码。显然问题是您查询的数据格式不完全匹配。那么,以下是如何处理调试此问题的方法:

var_dump()数据

可能的怀疑是某些数据有填充。 (奇怪的是,@ Ghost关于修剪结果的建议不起作用。)

    $array1 = explode(",",$query['filed1']);
    $array2 = explode(",",$query['filed2']);
    var_dump($array1);
    echo "\n";
    var_dump($array2);
    echo "\n";

检查迭代中的比较

以上应该揭示问题。如果没有,您可以更深入地了解in_array中哪个确切的比较失败。如果您没有可用的xdebug,只需在循环中循环:

    foreach ($array1 as $value) {
        if (in_array($value, $array2)) {
            echo "\n[$value found in \$array2]\n";
        } else {
            echo "\n[$value NOT found in \$array2]\n";
        }

        foreach ($array2 as $value2) {
            if ($value !== $value2) {
                echo "\$array1's '$value' !== \$array2's '$value2'\n";
            } else {
                echo "\$array1's '$value' === \$array2's '$value2'\n";
            }
        }
    }

输出会告诉你到底出了什么问题。

注意:您应该在引号中包含filed1和filed2,因为您将它们用作字符串键。当PHP解析您的代码时,它会发出通知(错误)并在将其解释为字符串时返回。