2017-10-04 144 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" }