2016-05-20 42 views
0

我一直在嘗試比較多維數組內部數組的值,並將這些常用值提取到另一個數組中。 我已經嘗試過使用array_intersect以及foreach循環,但是這並沒有給出結果,這裏內部數組的數量是動態的,並且由不同的函數生成。有沒有人在比較多維數組的數組元素之前嘗試過?php - 比較和提取常用數組元素

我的陣列:

$days_filter = array(
    [0] => array(
     '00:00', 
     '01:30', 
     '02:30', 
    ), 
    [1] => array(
     '00:00', 
     '01:30', 
     '03:30', 
    ), 
    [2] => array(
     '00:30', 
     '01:30', 
     '02:30', 
    ), 
    [3] => array(
     '00:30', 
     '01:30', 
     '04:30', 
    ), 
); 

$res_arr = $days_filter[0]; 
foreach ($days_filter as $filter) { 
    $res_arr = array_intersect($res_arr, $filter); 
} 

預期輸出數組:

$res_arr = array(
    [0]=>'01:30' 
) 

因爲01:30是所有內部陣列的共同元件。

+1

請提供預期的輸出 –

+0

沒有一個明確的問題,使一些示例清楚。 –

回答

0

array_intersect()作品你..

$days_filter = array(
    0 => array(
     '00:00', 
     '01:30', 
     '02:30', 
    ), 
    1 => array(
     '00:00', 
     '01:30', 
     '03:30', 
    ), 
    2 => array(
     '00:30', 
     '01:30', 
     '02:30', 
    ), 
    3 => array(
     '00:30', 
     '01:30', 
     '04:30', 
    ), 
); 
$first = $days_filter[0]; 

for($i=1; $i<count($days_filter); $i++) 
{ 
    $result = array_intersect($first, $days_filter[$i]); 
    $first = $result; 
} 

print_r($result); 

這會給你:

Array 
(
    [1] => 01:30 
) 
+0

這不是最好的回答,說實話...我的。是的,我對這樣糟糕的代碼獲得批准感到失望。 – JesusTheHun

+0

你爲什麼認爲這是不好的代碼? @JesusTheHun此代碼正在工作完美嘗試... –

+0

語義無意義,幾乎不可讀和可以理解,絕對混淆。很多代碼,其中一些是絕對無用的,即兩個變量'$ first'和'$ result',可以在一行代碼中完成。 – JesusTheHun

3

如果您使用的是PHP 5.6+:

$res_arr = array_intersect(...$days_filter); 

否則:

$res_arr = call_user_func_array('array_intersect', $days_filter); 

和你做:)

0

嘗試這樣的事情,從源頭source

<?php 
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); 
$a2=array("e"=>"red","f"=>"green","g"=>"blue"); 

$result=array_intersect($a1,$a2); 
print_r($result); 
?> 
2

您可以使用此代碼:

<?php 

$days_filter = array(
    0 => array(
     '00:00', 
     '01:30', 
     '02:30', 
    ), 
    1 => array(
     '00:00', 
     '01:30', 
     '03:30', 
    ), 
    2 => array(
     '00:30', 
     '01:30', 
     '02:30', 
    ), 
    3 => array(
     '00:30', 
     '01:30', 
     '04:30', 
    ), 
); 


$result = array(); 

for($j = 0; $j < count($days_filter[0]); $j++) 
{ 
    $tempArray = array(); 
    for($i = 0; $i < count($days_filter); $i++) 
     $tempArray[] = $days_filter[$i][$j]; 

    if(count(array_unique($tempArray)) == 1) 
     $result[] = $tempArray[0]; 
} 

print_r($result); 

工作演示:CLICK!!!

這是PHP版本獨立的,所以你不需要想在這個腳本是如何PHP5版本的作品。