我有數據的像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組?
謝謝
我有數據的像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組?
謝謝
您可能需要使用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
找到所有的共同元素,你並不真的需要。
你的意思是這樣嗎?
$data = array(1, 4, 6, 7)
$groupA = array();
$groupB = array();
foreach ((array) $data as $value) {
if ($value < 6) {
$groupA[] = $value;
} else {
$groupB[] = $value;
}
}
格爾茨,
XpertEase
嘗試使用array_intersect與每一個組......如果不是空的交集就意味着一些元素是該組中...
$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);
}
乾淨的解決方案。但對於大型陣列來說效率不高。即使檢查第一個值表明該子陣列屬於較大的陣列,它也會完全交叉。 – DhruvPathak 2011-06-08 08:01:41
@DhruvPathak你是對的。手動方法在更大的陣列上效率更高。甚至可能在搜索開始之前對組和數據進行排序。但這取決於他的情況。我發佈的是相對較小數據集的乾淨解決方案。 – 2011-06-08 08:03:23