0

これはかなり基本的なことですが、私の質問は次のとおりです。

与えられた配列:

$a = array(
0 => array('Rate'=> array('type_id'=>1, 'name' => 'Rate_1', 'type'=>'day','value'=>10)),
1 => array('Rate'=> array('type_id'=>1, 'name' => 'Rate_2', 'type'=>'night','value'=>8)),
2 => array('Rate'=> array('type_id'=>2, 'name' => 'Rate_3', 'type'=>'day','value'=>7)),
3 => array('Rate'=> array('type_id'=>2, 'name' => 'Rate_4', 'type'=>'nigh','value'=>16)),
4 => array('Rate'=> array('type_id'=>3, 'name' => 'Rate_5', 'type'=>'day','value'=>10))
);

それを変更する最も効率的な方法は何ですか?次のようなものがあります:

$new_array = array(
   [type_id] => array(
      [type] => array(
          [value]
          )
       )
    )
);

つまり、一部のデータ(名前は不要です)を削除して、配列の次元を再編成したいと思います。最終的には、 $ new_array ['type_id']['type']['value']によって値にアクセスできる配列ができます。

4

2 に答える 2

1

これがまさにあなたが望むものであるかどうかは完全にはわかりませんが、これを使用すると、次のように言って値にアクセスできます

echo $new[TYPE_ID][DAY_OR_NIGHT];

$new = array();

foreach($a AS $b){
    $c = $b['Rate'];
    $new[$c['type_id']][$c['type']] = $c['value'];
}

print_ronを使用すると、次のように$newなります。

Array
(
    [1] => Array
        (
            [day] => 10
            [night] => 8
        )

    [2] => Array
        (
            [day] => 7
            [night] => 16
        )

    [3] => Array
        (
            [day] => 10
        )

)
于 2013-01-29T16:17:10.697 に答える
0

php 5.3.0以降、array_reduce()では、初期値として配列を使用できます。初期配列$ aが与えられた場合、次のコードを使用できます。

function my_reducer ($result, $item) {

    $result[$item['Rate']['type_id']][$item['Rate']['type']] = $item['Rate']['value'];

    return $result;
}

$assoc_arr = array_reduce($a, 'my_reducer', array());
var_dump($assoc_arr);

これは

array(3) {   [1]=>   array(2) {
    ["day"]=>
    int(10)
    ["night"]=>
    int(8)   }   [2]=>   array(2) {
    ["day"]=>
    int(7)
    ["nigh"]=>
    int(16)   }   [3]=>   array(1) {
    ["day"]=>
    int(10)   } }
于 2013-01-29T16:27:27.873 に答える