表演迭代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个项目? –