2012-06-13 2 views
0

Je viens de découvrir comment boucler un tableau basé sur un autre tableau, mais mon problème est que si le second tableau est juste 1 objet que cela fonctionne bien, mais je veux le faire fonctionner avec deux objets.Boucle PHP basé sur le premier tableau

Voici un exemple comment faire des travaux,

$shorten = array(
    0 => 'ECAR', 
    1 => 'CCAR', 
    2 => 'ICAR', 
    3 => 'SCAR', 
    4 => 'FCAR', 
    5 => 'PCAR', 
); 

$data = array(
    'Hertz' => array(
     'ECAR' => '49.21', 
     'CCAR' => '71.04', 
     'ICAR' => '89.58', 
     'SCAR' => '100.00', 
    ) 
), 
    'Avis' => array(
     'ECAR' => '412.00', 
     'CCAR' => '347.00', 
     'ICAR' => '285.00', 
     'SCAR' => '224.00', 
     'FCAR' => '165.00', 
     'PCAR' => '100.00', 
    ) 
), 
); 

// default array as the base 
$shorten = array_combine($shorten, array_fill(0, count($shorten), 'n/a')); 

foreach($data as &$array) { 
    // merge to get set members 
    $array = array_merge($shorten, $array); 
} 
unset($array); 

print_r($data); 

Mais je veux le faire fonctionner avec celui-ci,

$shorten = array(
    0 => 'ECAR', 
    1 => 'CCAR', 
    2 => 'ICAR', 
    3 => 'SCAR', 
    4 => 'FCAR', 
    5 => 'PCAR', 
); 

$data = array(
    'Hertz' => array(
    'NYCT01' => array(
     'ECAR' => '49.21', 
     'CCAR' => '71.04', 
     'ICAR' => '89.58', 
     'SCAR' => '100.00', 
    ) 
), 
    'Avis' => array(
    'NYCT01' => array(
     'ECAR' => '412.00', 
     'CCAR' => '347.00', 
     'ICAR' => '285.00', 
     'SCAR' => '224.00', 
     'FCAR' => '165.00', 
     'PCAR' => '100.00', 
    ) 
), 
); 

// default array as the base 
$shorten = array_combine($shorten, array_fill(0, count($shorten), 'n/a')); 

foreach($data as $firstArray) { 
    foreach($firstArray as &$array){ 
     // merge to get set members 
     $array = array_merge($shorten, $array); 
    } 
} 
unset($array); 

print_r($data); 

Et ce que je veux que ce soit,

Array 
(
    [Hertz] => Array 
     (
      [ECAR] => 49.21 
      [CCAR] => 71.04 
      [ICAR] => 89.58 
      [SCAR] => 100.00 
      [FCAR] => n/a 
      [PCAR] => n/a 
     ) 

    [Avis] => Array 
     (
      [ECAR] => 412.00 
      [CCAR] => 347.00 
      [ICAR] => 285.00 
      [SCAR] => 224.00 
      [FCAR] => 165.00 
      [PCAR] => 100.00 
     ) 

) 
+0

$ données [1] [0] [0] = 412,00; C'est ainsi que vous auriez accès à un tableau dans un tableau, etc. Si c'est ce que vous vouliez dire, est-ce? Je ne comprends pas vraiment votre question. – Cninroh

+0

S'il vous plaît vérifier le tableau ce que je veux qu'il devrait être, thanx – thegrede

+0

Si votre question est répondue, définissez la [✔ réponse acceptée tick] (http://meta.stackexchange.com/q/5234), ne pas modifier le titre . – mario

Répondre

1
foreach($data AS $company => $nyc){ 
    $inner = $nyc['NYCT01']; 
    foreach($shorten AS $car){ 
     if(array_key_exists($car, $inner)){ 
      $output[$company][$car] = $inner[$car]; 
     }else { 
      $output[$company][$car] = "n/a"; 
     } 
    } 
} 

Parcourez simplement les données et vérifiez si la clé de l'une des voitures existe à l'intérieur du tableau NYCT01, si elle définit la valeur, sinon, "n/a".

Ma sortie:

Array 
(
    [Hertz] => Array 
     (
      [ECAR] => 49.21 
      [CCAR] => 71.04 
      [ICAR] => 89.58 
      [SCAR] => 100.00 
      [FCAR] => n/a 
      [PCAR] => n/a 
     ) 

    [Avis] => Array 
     (
      [ECAR] => 412.00 
      [CCAR] => 347.00 
      [ICAR] => 285.00 
      [SCAR] => 224.00 
      [FCAR] => 165.00 
      [PCAR] => 100.00 
     ) 

) 
+0

C'est une bonne idée, mais mon problème est que le '$ inner' est différent dans mon tableau, je veux dire qu'il pourrait être par exemple' NYCT02' ou 'NYCC01' etc. – thegrede

+0

Ensuite, vous pouvez alternativement traverser $ nyc –

+0

Oui tu as raison, j'essaye de faire ça, je me bats un peu ici, j'espère me débrouiller. – thegrede

0

Ok, il a obtenu ce fonctionne est le code réel je me suis dit,

foreach($data as $company => $nyc){ 
    foreach($nyc as $inner => $s){ 
     foreach($shorten as $car){ 
      if(array_key_exists($car, $nyc[$inner])){ 
       $output[$company][$car] = $nyc[$inner][$car]; 
      }else { 
       $output[$company][$car] = "n/a"; 
      } 
     } 
    } 
} 

Merci beaucoup pour votre aide Marcus,

Bonne chance.

Questions connexes