これは単純なプログラミングの質問です。PHP がforeach
ループ中に配列のコピーと設定解除をどのように処理するかについての知識が不足しているためです。こんな感じです。変更したい方法でフォーマットされた外部ソースからの配列があります。簡単な例は次のとおりです。
$myData = array('Key1' => array('value1', 'value2'));
しかし、私が欲しいのは次のようなものです:
$myData = array([0] => array('MyKey' => array('Key1' => array('value1', 'value2'))));
だから私は最初のものを取り、$myData
2番目のようにフォーマットします$myData
。私は自分のフォーマットアルゴリズムに全く問題ありません。私の質問は、これらの配列が少し扱いにくくなる可能性があるため、メモリを節約する方法を見つけることにあります。したがって、foreach
ループ中に現在の配列値を新しい形式にコピーしてから、元の配列から作業中の値を設定解除します。例えば:
$formattedData = array();
foreach ($myData as $key => $val) {
// do some formatting here, copy to $reformattedVal
$formattedData[] = $reformattedVal;
unset($myData[$key]);
}
unset()
ここで良いアイデアへの呼びかけはありますか?つまり、データをコピーして元の値が不要になったので、メモリを節約できますか? または、後続のコードでデータを参照していないため、PHP は自動的にデータをガベージ コレクションしますか?
コードは正常に実行され、これまでのところ、パフォーマンスの違いをテストするにはデータセットのサイズがごくわずかでした。後で奇妙なバグやCPUヒットに備えているのかどうかはわかりません.
洞察をありがとう。
-sR