2017-10-04 148 views
0

我有4个数组,每次运行我的代码时都会有所不同。有时候,也许是空的。我使用array_intersect从数组集合中获取公共值,如果数组中的任何一个为空,它将返回一个空数组。我想要array_intersect忽略空数组。PHP Array Intersect不包含空数组

例子:

$array1 = array('441', '442', '443'); 
$array2 = array('441', '443'); 
$array3 = array('441', '442',); 
$array4 = array(); 

var_dump(array_intersect($array1, $array2, $array3, $array4)); 

// Returns 
array(''); 

// Required 
array('441'); 

我如何使它忽略$array4并给予441

+1

这是函数是如何工作的。其他一切都没有意义。在调用函数之前,您需要检查数组是否为空 - 然后将其包含在参数列表中,或者不包含它。 – CBroe

+0

我知道,但那是我在问题中确切问到的。如何让'array_intersect'忽略空数组 –

+0

总是只有4个数组? – GrumpyCrouton

回答

8

输出如果您存储阵列作为一个数组,你可以这样做:

<?php 
// create array of arrays 
$array[] = array('441', '442', '443'); 
$array[] = array('441', '443'); 
$array[] = array('441', '442'); 
$array[] = array(); 

// filter out empty array 
$array = array_filter($array); 

// pass in array (inline argument unpacking PHP > 5.6) 
print_r(array_intersect(...$array)); 

Array 
(
    [0] => 441 
) 

https://3v4l.org/MD3r2

1
$tempArray = []; 
if (count($g_arr) >0) $tempArray[] = $g_arr; 
if (count($c_arr) >0) $tempArray[] = $c_arr; 
if (count($k_arr) >0) $tempArray[] = $k_arr; 
if (count($m_arr) >0) $tempArray[] = $m_arr; 
if (count($p_arr) >0) $tempArray[] = $p_arr; 

$intersect = call_user_func_array('array_intersect', $tempArray); 
+0

这是一个不好的做法,我认为! –

+0

为什么'count()'?你可以检查它是否为'empty()',这些变量名称在一定程度上不具有描述性 – GrumpyCrouton

1

有以下解决方案来看看:

$array = array(); //initialize $arrar 
$array[] = array('441', '442', '443'); 
$array[] = array('441', '443'); 
$array[] = array('441', '442',); 
$array[] = array(); 
$array = array_filter($array); //filter empty array 
$res_arr = array_shift($array); // Shift an element off the beginning of array 
foreach($array as $filter){ 
     $res_arr = array_intersect($res_arr, $filter); 
} 

print_r($res_arr); 

输出

Array ([0] => 441) 

在见例如:https://3v4l.org/Rkt1R

1
$array1 = array('441', '442', '443'); 
$array2 = array('441', '443'); 
$array3 = array('441', '442',); 
$array4 = array(); 


function get_intersect(...$arrays){ 
    $instersect_arrays = array(); 

    foreach($arrays as $array){ 
     if(!empty($array)){ 
      array_push($instersect_arrays,$array); 
     } 
    } 

    return call_user_func_array('array_intersect', $instersect_arrays); 
} 

var_dump(get_intersect($array1, $array2, $array3, $array4)); 

//output: array(1) { [0]=> string(3) "441" }