2016-06-18 28 views
1

Ich habe die folgenden zwei Arrays.PHP - Überprüfen, ob Werte in einem Array in einem anderen Array mehrdimensionalen Array vorhanden sind

Dies ist eine flache Array (string: $ second_names):

Array ([0] => Cars [3] => Bikes [8] => Trucks) //$second_names 

ich dieses mehrdimensionale Array - (string: $ premiumCatArraySets):

Array 
(
    [0] => Array 
     (
      [primary-category] => Automobiles 
      [secondary-category] => Cars 
      [tertiary-category] => Fiat Punto 
     ) 
[1] => Array 
    (
     [primary-category] => Automobiles 
     [secondary-category] => Cars 
     [tertiary-category] => BMW 
    ) 

[2] => Array 
    (
     [primary-category] => Automobiles 
     [secondary-category] => Bikes 
     [tertiary-category] => Honda 
    ) 

[4] => Array 
    (
     [primary-category] => Automobiles 
     [secondary-category] => Trucks 
     [tertiary-category] => Iveco 
    ) 

[6] => Array 
    (
     [primary-category] => Automobiles 
     [secondary-category] => Cars 
     [tertiary-category] => Mercedes 
    ) 

[9] => Array 
    (
     [primary-category] => Automobiles 
     [secondary-category] => Cars 
     [tertiary-category] => Toyota 
    ) 

Ich versuche in_array zu verwenden, um Sehen Sie, ob die Werte in der flachen Reihe existieren und die Marke des Autos ausgeben.

ist, was ich

versucht
foreach ($second_names as $second_name) {//Vechile type e.g. car, truck, bike 
    if(in_array($second_name, $premiumCatArraySets)){ 
     echo '<h2>'.$second_name.'</h2>'; 
     foreach ($third_names as $third_name) {// e.g. Fiat, BMW, Toyota 
      echo $third_name.'<br/>'; 
     } 
    } 
} 

Die Linie für if(in_array($second_name, $premiumCatArraySets)){ scheint nicht, etwas zu sein, anzeigt.

Antwort

2

Wenn mein Verständnis stimmt, müssen Sie die Fahrzeugmarke aus dem zweiten Array für jedes Fahrzeug in der ersten Reihe holen. Sie könnten etwas wie unten tun. Dies ist ein grundlegendes Skript.

<?php 

$vehicles = ['Cars', 'Bikes', 'Trucks']; 

$details = [ 
    [ 
     'primary-category' => 'Automobiles', 
     'secondary-category' => 'Cars', 
     'tertiary-category' => 'BMW' 
    ], 
    [ 
     'primary-category' => 'Automobiles', 
     'secondary-category' => 'Trucks', 
     'tertiary-category' => 'Benz' 
    ] 
]; 

foreach ($vehicles as $vehicle) { 
    foreach ($details as $detail) { 
     if ($vehicle == $detail['secondary-category']) { 
      echo $detail['tertiary-category']; 
      break; 
     } 
    } 
} 

?> 
+0

Dank. Das sagt mir 'PHP Fataler Fehler: Funktionsname muss eine Zeichenkette sein' für 'if ($ vehicle == $ detail [' secondary-category ']) {' – user6043723

+0

Sie haben versucht, dasselbe Skript in meiner Antwort auszuführen? Works Charme für mich! –

+0

Ja, ich habe es in kleinem Maßstab versucht. $ Secondary_names = array ('Autos', 'Bikes', 'Trucks'); $ Details = array ( 0 => Array ( 'primär Kategorie' => 'Automobil', 'sekundär Kategorie' => 'Cars', 'tertiär-Kategorie' => 'BMW', ), 1 => array ( 'Primärkategorie' => 'Automobil' 'Secondary-Kategorie' => 'Trucks, 'tertiär-Kategorie'=> 'Benz', ) ); ' – user6043723

1

$output = []; 
foreach($premiumCatArraySets as $key => $value){  
    if(in_array($value["secondary-category"],$second_names)){ 
     if(!isset($output[$value["secondary-category"]])){ 
      $output[$value["secondary-category"]] = []; 
     }   
     $output[$value["secondary-category"]][] = $value["tertiary-category"]; 
    } 
} 
foreach($output as $key => $value){ 
    echo '<h2>'.$key."</h2>"; 
     echo implode(", ",$value)."<br/>"; 
} 

Ausgabe

Cars  
Fiat Punto, BMW, Mercedes, Toyota 

Bikes  
Honda 

Trucks  
Iveco 

Refer : Demo

1

Die Lösung Versuchen Sie es mit call_user_func_array, array_merge_recursive, array_keys , array_flip, array_intersect_key und implode Funktionen:

// grouping each category preserving the position of each item 
$groups = call_user_func_array('array_merge_recursive', $premiumCatArraySets); 
foreach ($second_names as $name) { 
    $indexes = array_flip(array_keys($groups['secondary-category'], $name)); 
    echo '<h2>'.$name.'</h2>'; 
    echo implode(", ", array_intersect_key($groups['tertiary-category'], $indexes)) .'<br/>'; 
} 

Der Ausgang:

<h2>Cars</h2>Fiat Punto, BMW, Mercedes, Toyota<br/><h2>Bikes</h2>Honda<br/><h2>Trucks</h2>Iveco<br/>

Verwandte Themen