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

Большое спасибо за вашу помощь Marcus,

удачи.

Смежные вопросы