2011-04-23 131 views
1

數組聲明的截距:$uids = array();PHP計算陣列

接着這些陣列可以或可以不被創建:

$uids['locations']; 
$uids['ages']; 
$uids['genders']; 

如果它們中的至少2創建我要計算的相交。如果所有3創建了我想要的一切3.

所以相交,我可能要計算的$uids['locations']$uids['ages']相交或$uids['ages']$uids['genders']相交等

如果把所有3個數組中array_intersect然後我得到錯誤,如果他們中的一個不是數組。我不知道如何處理這個,如果沒有很多if:else語句,並且認爲有更好的方法。

回答

5

如果你知道你沒有更多的數組鍵大於指定的,您可以使用此:

$intersect = array(); 
if (count($uids) > 1) { 
    $intersect = call_user_func_array('array_intersect', $uids); 
} 

否則,你可以試試這個:

$_uids = array_intersect_key($uids, array(
    'locations' => 1, 
    'ages' => 1, 
    'genders' => 1, 
)); 
if (count($uids) > 1) { 
    $intersect = call_user_func_array('array_intersect', $_uids); 
} 
+1

@nikic:它幫助。閱讀'call_user_func_array'文檔 – zerkms 2011-04-23 12:56:35

+0

@soulmerge:很棒的解決方案,+1!但在這種情況下,我們不能指定哪些項目相交 – zerkms 2011-04-23 12:57:04

+0

嗯,仇恨會討厭。已更新回答 – soulmerge 2011-04-23 12:58:01