私のデータ マイニング プロジェクトでは、処理する前に「修正」を実行する必要があることを除いて、必要なすべての情報を含む複雑で巨大な多次元配列の配列が与えられます。この問題を処理するコードをいくつか書きましたが、「修正」しなければならない膨大な量のデータには時間がかかりすぎており、誰かがより効率的な解決策を見つけるのを手伝ってくれることを願っています.
基本的に、私が扱っている配列のタイプは、通常の配列と同じように、最初に整数でインデックス付けされます。つまり$x[0], $x[1], $x[2]
、各要素は、必要なキーペアの値を含む連想配列です (など$x[0]['item'], $x[0]['price']
)、ただし、1 つのキーは、ID というもう少し深い場所に格納されます。
ID 番号は として配列に存在し、$x[0]['@attributes']['id']
この情報を のような他のキー ペアと一緒に複製して構造を簡素化したいと考えています$x[0]['id']
。
私が扱っているデータ セットは大きいですが、ここに私の状況の簡単な例を示します。
$attrib1 = array('id'=>'101');
$item1 = array('@attributes'=>$attrib1, 'item'=>'milk', 'price'=>'3.50');
$attrib2 = array('id'=>'102');
$item2 = array('@attributes'=>$attrib2, 'item'=>'butter', 'price'=>'2.45');
$attrib3 = array('id'=>'103');
$item3 = array('@attributes'=>$attrib3, 'item'=>'bread', 'price'=>'1.19');
$items = array($item1, $item2, $item3);
echo "Starting data - items using itemid as attribute:\n";
print_r($items);
# set item numbers by key instead of attribute
$i=0;
while(isset($items[$i]['@attributes']['id'])) {
$items[$i]['itemid'] = $items[$i]['@attributes']['id'];
#unset($items[$i]['@attributes']);
$i++;
} # while
echo "\nDesired result - items using itemid as key:\n";
print_r($items);
上記の例からの出力は次のとおりです。
Starting data - items using itemid as attribute:
Array
(
[0] => Array
(
[@attributes] => Array
(
[id] => 101
)
[item] => milk
[price] => 3.50
)
[1] => Array
(
[@attributes] => Array
(
[id] => 102
)
[item] => butter
[price] => 2.45
)
[2] => Array
(
[@attributes] => Array
(
[id] => 103
)
[item] => bread
[price] => 1.19
)
)
Desired result - items using itemid as key:
Array
(
[0] => Array
(
[@attributes] => Array
(
[id] => 101
)
[item] => milk
[price] => 3.50
[itemid] => 101
)
[1] => Array
(
[@attributes] => Array
(
[id] => 102
)
[item] => butter
[price] => 2.45
[itemid] => 102
)
[2] => Array
(
[@attributes] => Array
(
[id] => 103
)
[item] => bread
[price] => 1.19
[itemid] => 103
)
)
目的の結果に追加された [itemid] キーと値のペアに注意してください。これを達成するためのより高速でエレガントな方法はありますか? PHP の派手な配列関数をいくつか見てきましたが、このより複雑な状況に頭を悩ませてそれらを利用することはできません。何か案は?