複数のforeachループと我々はすでに<code>foreach</code>知られているので
、各位へのちょうど別のメモリリークの話は痛みと頭痛があります。そして、それは我々が双子を持っている場合は血まみれの殺人マシンになるだろうか、行のforeach
以上であってもよい:)
例えば、私の状況では
foreach ($parent as $parentData) {
// few conditional added here
$parentObj = $this->extract();
foreach ($chilren as $childrenData) {
if ($childrenData['id'] === $parentData['id']) {
$childrenObj = $this->extract();
$parentObj->setData($childrenObj);
// and even more evil things come here....
}
}
$parentObj->save();
}
、私は双子foreach
を持っています。それぞれにはおよそ50,000〜70,000のレコードが含まれています。 $parent
および$children
は、メソッドに渡されるパラメータです。
生データソースは、$parent
と$children
の両方がCSVファイルです。そして私はで旅行可能になるようにyield
を使用しています。
yield
と問題はありません。戻る私のconcernationへhttps://stackoverflow.com/a/37342184/2932590
、私が最初にforeach
の終わりにunset
に$parentObj
と$childrenObj
の両方を試してみましたが、残念ながら:あなたはコードの懸念があれば、このサイト:)
の60K +プレイヤーが保証されています動いていない。私も参照&$parentData
を使用しようとしましたが、結果は同じです。
私の人生の残りの部分までこの仕事をすることができますか?
ありがとうございました。私は少数だ
を更新し
は、この場合にはSPLイテレータを使用することをお勧め。誰も私にそれがどのように動作するか説明してもらえますか?
ありがとうございました。私は以下、SPL Iteratorを使用しています#2
を更新し
新しいコードです:
$parent = new IteratorIterator(new ArrayIterator($parentArr));
$children = new IteratorIterator(new ArrayIterator($chilrenArr));
foreach ($parent as $index => $parentData) {
$parentObj = null;
// few conditional added here
$parentObj = $this->extract();
$childrenObj = null;
foreach ($chilren as $key => $childrenData) {
if ($childrenData['id'] === $parentData['id']) {
$childrenObj = $this->extract();
$parentObj->setData($childrenObj);
// and even more evil things come here....
}
}
$parentObj->save();
$childrenObj->save();
}
あなたの質問は何ですか? – hkBst
@hkBst:foreach内で複数のforeachとsaveオブジェクトを使用すると、PHPはエラーをスローします:許容されたメモリが使い果たされました.... –
これで、行ごとにデータを読み込んでいるので、$でデータセット全体を再構築しようとしていますか? parentObj? – hkBst