2012-11-14 154 views
0

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

代码

  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

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

在你的情况下print_r($CITB);不打印为Array()这意味着它不是一个空数组,很可能是一个空字符串。所以$b = array_diff($PRB,$a);结果$bnull

如果您打开错误报告,您应该会看到一些警告。否则使用var_dump而不是print_r来查看变量的类型。

+0

哦,你是对的,那是因为我'如果'检查数据库中是否有数据,并且没有将$ CITB定义为变量,所以它最终为一个空字符串。感谢您的快速提示! – Ando