2012-06-13 31 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"; 
      } 
     } 
    } 
} 

非常感谢您的帮助马库斯,

好运。