2017-12-11 1 views
-3

Ich habe dieses Array:PHP Filter anwenden auf mehrdimensionales Array

Array 
(
[54190] => Array 
    (
     [Dealer] => RETIRO ANDEN ANDEN 
     [Products] => Array 
      (
       [SWEETS] => Array 
        (
         [2000 - 0] => Array 
          (
           [DESC] => KIT KAT 
           [DIM] => 36X41.5G 
          ) 
         [3993 - 0] => Array 
          (
           [DESC] => COOKIE COCO 
           [DIM] => 30 X 120 GRM 
          ) 
        ) 
       [REFRIGERATED] => Array 
        (
         [1000 - 0] => Array 
          (
           [DESC] => SEM C/CCHA 
           [DIM] => 9X4X135 
          ) 
        ) 
      ) 
    ) 
[54183] => Array 
    (
     [Dealer] => MIGUEL PEREZ (HIJO) 
     [Products] => Array 
      (
       [TRADITIONAL] => Array 
        (
         [200 - 0] => Array 
          (
           [DESC] => COFFEE STICK CL 
           [DIM] => 77X172.8G 
          ) 
        ) 
      ) 
    ) 
[54451] => Array 
    (
     [Dealer] => HUGO FRUGO. 
     [Products] => Array 
      (
       [SWEETS] => Array 
        (
         [3993 - 0] => Array 
          (
           [DESC] => COOKIE COCO 
           [DIM] => 30 X 120 GRM 
          ) 
        ) 
      ) 
    ) 
[54107] => Array 
    (
     [Dealer] => JAVIER M. 
     [Products] => Array 
      (
       [SWEETS] => Array 
        (
         [2001 - 0] => Array 
          (
           [DESC] => COOKIE VAINILLA 
           [DIM] => 30 X 120 GRM 
          ) 
        ) 
      ) 
    ) 
) 

Und ich brauche einen Filter anwenden nur jene Felder zu zeigen, dass die folgenden Codes innerhalb der [Produkte] Array enthalten ‚2000-0‘ oder "2001 - 0" und auch ohne den Rest der Produkte.

Ausgang:

Array 
(
[54190] => Array 
    (
     [Dealer] => RETIRO ANDEN ANDEN 
     [Products] => Array 
      (
       [SWEETS] => Array 
        (
         [2000 - 0] => Array 
          (
           [DESC] => KIT KAT 
           [DIM] => 36X41.5G 
          ) 
        ) 
      ) 
    ) 
[54107] => Array 
    (
     [Dealer] => JAVIER M. 
     [Products] => Array 
      (
       [SWEETS] => Array 
        (
         [2001 - 0] => Array 
          (
           [DESC] => COOKIE VAINILLA 
           [DIM] => 30 X 120 GRM 
          ) 
        ) 
      ) 
    ) 
) 

Und ich löste die Frage, die Antwort unten. und funktioniert perfekt auf den Fall.

Besonderer Dank an Inkognito-Benutzer, die geholfen, aber seine Antwort beseitigt. :)

+0

http://php.net/manual/en/function.array-filter.php – Sammitch

+0

Hinweis: Für jeden Händler filtern, um die Produkte auf, was Sie suchen,, dann filtern Sie die Händler ohne weitere Produkte aus. – Sammitch

+0

Dies wird helfen, http://php.net/manual/en/function.array-key-exists.php Wenn Sie irgendein Problem haben, werden wir Ihnen helfen. –

Antwort

0

Lösung:

$find = array('2000 - 0', '2001 - 0'); 
    foreach ($ArrayIn as $k1 => $v1) { 
     foreach ($v1['Products'] as $v2 => $v3) { 
      foreach ($v3 as $key => $value) { 
        if(in_array($key, $find)){ 

         if($Last != $k1){ 
         $Line = array(); 
         $Last=$k1; 
         } 

         $Line[$v2][$key]= $ArrayIn[$k1]['Products'][$v2][$key]; 

         $output[$k1] = $output[$k1] = array(
             'Dealer' => $ArrayIn[$k1]['Dealer'], 
             'Products' => $Line 
             ); 
        } 
       } 
      } 
     }