2011-06-08 105 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