2016-05-20 4 views
0

Ich habe versucht, Werte von inneren Arrays aus einem mehrdimensionalen Array zu vergleichen und diese gemeinsamen Werte in ein anderes Array zu extrahieren. Ich habe versucht, array_intersect zusammen mit einer foreach Schleife zu verwenden, aber dies gibt mir kein Ergebnis, hier ist die Anzahl der inneren Arrays dynamisch und aus einer anderen Funktion generiert. Hat jemand versucht, Array-Elemente eines mehrdimensionalen Arrays zu vergleichen?php - Vergleichen und Extrahieren von gemeinsamen Array-Elementen

My Array:

$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); 
} 

Erwartete Ausgangsarray:

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

01:30 weil das gemeinsame Element aller inneren Arrays ist.

+1

Bitte geben Sie die erwartete Ausgabe –

+0

keine klare Frage, machen es mit einigen Beispiel klar. –

Antwort

0

array_intersect() Werke für Sie ..

$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); 

Dies gibt Ihnen:

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

Dies ist nicht die beste Antwort um ehrlich zu sein ... meine ist. Und ja, ich bin enttäuscht, dass solch ein schlechter Code Zustimmung findet. – JesusTheHun

+0

Warum hast du gedacht, dass das ein schlechter Code ist? @JesusTheHun dieser Code funktioniert perfekt versuchen Sie es ... –

+0

Semantisch bedeutungslos, kaum lesbar und verständlich, auf jeden Fall verwirrend. Eine Menge Code, einige davon absolut nutzlos, d. H. Zwei Vars '$ first' und' $ result', für etwas, das in einer Codezeile ausgeführt werden kann. – JesusTheHun

3

Wenn Sie mit PHP 5.6+:

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

Ansonsten:

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

Und Sie sind :)

0

versuchen so etwas wie diese Quelle von 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); 
?> 
getan
2

Sie können diesen Code verwenden:

<?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); 

Arbeits Demo: CLICK!!!

Es ist PHP-Version unabhängig, so dass Sie dieses Skript funktioniert, wie PHP5 Version nicht denken müssen.