奇怪的array_diff结果

时间:2012-11-14 02:02:29

标签: php

我使用codeigniter从各种db表中获取一些数据。有趣的是,这个代码上面的10行我正在测试这个概念与其他一些名称和一切按预期工作的数组。现在我正在尝试使用我的数据库中的数据做同样的事情,但它似乎没有用。

代码

            echo "a:";print_r($CITB);
            echo "<br />b:";print_r($PRB);
            echo "<br />c:";print_r($TB);
            echo "<br />d:";print_r($TRB);


            $a = $CITB; //I know this is empty
            $b = array_diff($PRB,$a);
            $c = array_diff($TB, $b, $a);
            $d = array_diff($TRB, $c, $b, $a);

             echo "<br /><br />a:";print_r($a);
             echo "<br />b:";print_r($b);
             echo "<br />c:";print_r($c);
             echo "<br />d:";print_r($d);die();

结果

a:
b:Array ( [0] => 8 [1] => 52 ) 
c:Array ( [0] => 8 [1] => 52 ) 
d:

a:
b:
c:
d:

预期结果

a:Array()
b:Array ( [0] => 8 [1] => 52 ) 
c:Array()
d:Array()

1 个答案:

答案 0 :(得分:1)

array_diff的参数应该是数组。否则它将返回null

在你的情况下,print_r($CITB);不会打印为Array(),这意味着它不是一个空数组,很可能是一个空字符串。因此$b = array_diff($PRB,$a);会导致$b成为null

如果您打开错误报告,则会看到一些警告。否则,请使用var_dump代替print_r来查看变量的类型。