2012-08-07 66 views
0

我有两个数组$ a和$ b。php中的多维数组差异

$a = Array 
    (
     [0] => Array 
      (
       [a] => 1 
       [d] => CONTACT 
       [f] => 2 
      ) 

    ) 
and 
    $b = Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 1 
      [c] => 4 
      [d] => CONTACT 
      [e] => 2012-08-07 05:56:18 
      [f] => 2 
     ) 

    [1] => Array 
     (
      [a] => 2 
      [b] => 3 
      [c] => 4 
      [d] => CONTACT 
      [e] => 2012-08-07 05:56:18 
      [f] => 1 
     ) 

    [2] => Array 
     (
      [a] => 2 
      [b] => 4 
      [c] => 4 
      [d] => CONTACT 
      [e] => 2012-08-07 05:56:18 
      [f] => 1 
     ) 


) 

如果第一个数组的a,d,f字段与第二个数组匹配,我想删除第二个数组的父数组。在这种情况下, 我想做unset($b[0]);。如何在没有循环的情况下做到这一点?如果不能,给我一个循环的解决方案。在cakephp中有没有任何方法?

+0

第一个数组有'a,d,f'键。你能澄清吗? – tigrang 2012-08-07 06:19:59

+0

为什么你不想使用循环? – 2012-08-07 06:22:23

+0

数组可能包含500行。我认为循环会消耗很多处理能力 – EbinPaulose 2012-08-07 06:25:42

回答

0

像这样的东西?

$count = count($b) 
for($i = 0; $i < $count; $i++) 
{ 
    foreach($a[0] as $c => $v) 
    { 
     $match = true; 
     if($b[$i][$c] != $v) 
     { 
      $match = false; 
     } 
     if($match) 
      unset($b[$i]); 
    } 

} 

这可能会做的伎俩,但我想会有某种更快的方法... 但是,我认为500行应该是一个问题。

0

你不能这样做没有循环,但它不会花费时间。试试这个:

foreach ($b as $key => $value) { 
    if (sizeof(array_diff_assoc($a[0], $value)) > 0) { 
     unset($b[$key]); 
    } 
}