2015-01-13 23 views
5

Dies ist meine Eingabe-Array:Wie filtere ich dieses mehrdimensionale Array?

INPUT:

$input["a"]["b"]["UK"] = 96 ; 
$input["a"]["c"]["UK"] = 69 ; 
$input["a"]["bp"]["USA"] = 29 ; 
$input["a"]["c"]["USA"] = 59 ; 
$input["a"]["dd"]["UK"] = 31 ; 
$input["a"]["cg"]["UK"] = 38 ; 

ich ein neues Array erhalten möchten, die nur enthalten [ "USA"].

$output["a"]["bp"]["USA"] = 29 ; 
$output["a"]["c"]["USA"] = 59 ; 

ist es möglich: So haben die Ausgabe

OUTPUT .............. werden?

+0

Es ist dreidimensionale Anordnung. Ich habe versucht, dies zu tun. Aber ich bekomme meine gewünschte Antwort nicht. –

+0

Dann aktualisieren Sie Ihre Frage und zeigen Sie uns, was Sie versucht haben – Rizier123

+1

Ich versuche immer noch. Ich werde meinen Entwurf hinzufügen, wenn Sie eine genauere Lösung finden. –

Antwort

5

Dies wird funktionieren.

$input["a"]["b"]["UK"] = 96 ;  
$input["a"]["c"]["UK"] = 69 ; 
$input["a"]["bp"]["USA"] = 29 ; 
$input["a"]["c"]["USA"] = 59 ; 
$input["a"]["dd"]["UK"] = 31 ; 
$input["a"]["cg"]["UK"] = 38 ; 
$tempResult = array(); 

foreach($input as $key => $value){ 

    foreach($value as $subkey => $subvalue){ 

     foreach($subvalue as $finalkey => $finalvalue){ 

      if($finalkey == 'USA') { 

       $tempResult[$key][$subkey][$finalkey] = $finalvalue; 
      } 
     } 
    } 
} 

echo '<pre>';print_r($tempResult);echo '</pre>'; 
+0

was ist, wenn es vierdimensional oder n dimensional ist. –

+0

In diesem Fall müssen Sie die Rekursionsfunktion erstellen und die Tiefe angeben (4. Ebene oder n Ebene) und die oben erwähnte Erwähnung einfügen. – user2944231

3
<?php 
$input["a"]["b"]["UK"] = 96 ; 
$input["a"]["c"]["UK"] = 69 ; 
$input["a"]["bp"]["USA"] = 29 ; 
$input["a"]["c"]["USA"] = 59 ; 
$input["a"]["dd"]["UK"] = 31 ; 
$input["a"]["cg"]["UK"] = 38 ; 

foreach($input as $x => $y) { 
    foreach($y as $zz => $r) { 
     foreach($r as $xxx => $j) { 
      if($xxx == "USA") { 
       echo($j); 
      } 
     } 
    } 
} 
?> 

user2944231 ist sauberer denke ich, aber ya

3

Die direkteste Antwort ist foreach verwenden Schleifen:

$input=array(); 
$output=array(); 
$input["a"]["b"]["UK"] = 96 ; 
$input["a"]["c"]["UK"] = 69 ; 
$input["a"]["bp"]["USA"] = 29 ; 
$input["a"]["c"]["USA"] = 59 ; 
$input["a"]["dd"]["UK"] = 31 ; 
$input["a"]["cg"]["UK"] = 38 ; 

//get the level 0 keys (e.g. a) level 0 value (e.g array("b"=>array("UK"=>96))) 
foreach($input as $level_0_key => $level_0_value) 
{ 
    //get the level 1 keys (e.g. b) level 1 value (e.g array("UK"=>96)) 
    foreach($level_0_value as $level_1_key => $level_1_value) 
    { 
     //get the level 2 keys (e.g. UK) level 2 value (e.g 96) 
     foreach($level_1_value as $level_2_key => $level_2_value) 
     { 
      if($level_2_key=="USA") 
      { 
       $output[$level_0_key][$level_1_key][$level_2_key]=$level_2_value; 
      } 
     } 
    } 
} 
print_r($output);