表演迭代in_array()
電話之後unset()
是過度處理,它忽視了array_intersect()
魔術這確實應該是任何固體的英雄這個案例的解決方案。
這裏是稀迭代函數:
代碼:(Demo)
function array_intersect_multi($arrays){ // iterative method
while(sizeof($arrays)>1){
$arrays[1]=array_intersect($arrays[0],$arrays[1]); // find common values from first and second subarray, store as (overwrite) second subarray
array_shift($arrays); // discard first subarray (reindex $arrays)
}
return implode(', ',$arrays[0]);
}
echo array_intersect_multi([[1,2,3,4,5],[1,3,5],[1,3,4,5],[1,3,5,6,7,8,9]]);
// output: 1, 3, 5
這裏假設你將單獨的陣列封裝成陣列的索引數組。
我也考慮過遞歸函數,但遞歸速度較慢,並使用更多的內存。
function array_intersect_multi($arrays){ // recursive method
if(sizeof($arrays)>1){
$arrays[1]=array_intersect($arrays[0],$arrays[1]); // find common values from first and second subarray, store as (overwrite) second subarray
array_shift($arrays); // discard first subarray (reindex $arrays)
return array_intersect_multi($arrays); // recurse
}
return implode(', ',$arrays[0]);
}
此外,如果你是快樂的扁平化的陣列到一個與array_merge()
和申報單陣列的數量正在處理,你可以使用這個:
(最快方法)
代碼:(Demo)
function flattened_array_intersect($array,$total_arrays){
return implode(', ',array_keys(array_intersect(array_count_values($array),[$total_arrays])));
}
echo flattened_array_intersect(array_merge([1,2,3,4,5],[1,3,5],[1,3,4,5],[1,3,5,6,7,8,9]),4);
或更換array_intersect()
與array_filter()
(略慢,更詳細):
function flattened_array_intersect($array,$total_arrays){
return implode(', ',array_keys(array_filter(array_count_values($array),function($v)use($total_arrays){return $v==$total_arrays;})));
}
echo flattened_array_intersect(array_merge([1,2,3,4,5],[1,3,5],[1,3,4,5],[1,3,5,6,7,8,9]),4);
這是一個實際應用的家庭作業或假設的情況?因爲這種方法會有所不同。例如,你說無限數量的數組,但是數組真的不超過每個約8個項目? –