0

別の配列に基づいて配列をループする方法を見つけましたが、2番目の配列が1つのオブジェクトである場合は正常に機能しますが、2つのオブジェクトで機能させたいという問題があります。

これがどのように機能するかの例です。

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

)
4

2 に答える 2

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
        )

)
于 2012-06-13T14:19:53.023 に答える
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";
            }
        }
    }
}

マーカス、ありがとうございました。

幸運を。

于 2012-06-13T15:12:46.467 に答える