2012-06-13 28 views
0

我剛剛發現如何循環基於另一個數組的數組,但是我的問題是,如果第二個數組只是1個對象而不是它的工作正常,但我想使它與兩個對象。基於第一個數組的循環PHP數組

這裏是如何做的工作,

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

一個例子,但我想讓它與這一個工作,

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

而這正是我希望它是,

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

$ data [1] [0] [0] = 412.00;這就是你將如何訪問數組中的數組等等,如果這就是你的意思,是嗎?我真的不明白你的問題。 – Cninroh

+0

請檢查陣列我想要它應該是什麼,thanx – thegrede

+0

如果您的問題得到解答,請設置[✔接受答案打勾](http://meta.stackexchange.com/q/5234),不要編輯標題。 – mario

回答

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"; 
     } 
    } 
} 

只循環數據並檢查任何汽車的鑰匙是否存在於NYCT01陣列內,如果它確實設置了值,否則,「n/a」。

我的輸出:

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

這是一個好主意,但我的問題是''inner''在我的數組中有所不同,我的意思是它可能是例如'NYCT02'或'NYCC01'等。 – thegrede

+0

然後或者您可以循環$ nyc –

+0

是你是對的,我試圖做到這一點,我在這裏掙扎一點,希望弄清楚。 – thegrede

0

好,我知道它的工作,這是真正的代碼,我算了一下,

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"; 
      } 
     } 
    } 
} 

非常感謝您的幫助馬庫斯,

好運。