2011-06-08 110 views
3

所有PHP返回结果不同组中

我有数据的像1, 2, 3, 4, 5, 6, 7, 8, 9, 10

然后我这些数据分离成2个基团,其是

$groupA = range(1, 5) 

$groupB = range(6, 10) 

例如束,我有$data = array(1, 4)和它将返回这属于组A.同样, $data = array(7,8),它将返回给我B组。

那么我怎么写一个脚本让$data = array(1, 4, 6, 7)回到我的A组和B组?

谢谢

回答

4

您可能需要使用array_intersect:那an empty array evaluates to false而一个有至少一个元素的计算结果为true

$groupA = range(1, 5); 
$groupB = range(6, 10); 
$data = array(1, 4, 6, 7); 
$foundGroups = array(); 
if(array_intersect($data, $groupA)) 
    $foundGroups[] = 'A'; 
if(array_intersect($data, $groupB)) 
    $foundGroups[] = 'B'; 
print_r($foundGroups); 

注。

警告:如果您必须与很多元素一起工作,您可能需要使用手动方法并停止找到第一个公共元素。 array_intersect找到所有的共同元素,你并不真的需要。

+1

干净的解决方案。但对于大型阵列来说效率不高。即使检查第一个值表明该子阵列属于较大的阵列,它也会完全交叉。 – DhruvPathak 2011-06-08 08:01:41

+0

@DhruvPathak你是对的。手动方法在更大的阵列上效率更高。甚至可能在搜索开始之前对组和数据进行排序。但这取决于他的情况。我发布的是相对较小数据集的干净解决方案。 – 2011-06-08 08:03:23

0

你的意思是这样吗?

$data = array(1, 4, 6, 7) 
$groupA = array(); 
$groupB = array(); 

foreach ((array) $data as $value) { 
    if ($value < 6) { 
     $groupA[] = $value; 
    } else { 
     $groupB[] = $value; 
    } 
} 

格尔茨,

XpertEase

0

尝试使用array_intersect与每一个组......如果不是空的交集就意味着一些元素是该组中...

0
$data = range(1,9); 

$groupA = array_filter($data, "less"); 
$groupB = array_filter($data, "more"); 


function less ($v) { 
     return $v < 6; 
} 

function more ($v) { 
     return ! less($v);  
} 

See it