他の人が'07にこの問題を抱えていましたが、答えが返ってこなかった:配列に6,670行以上ある場合、json_encode($ someArray)は暗黙に失敗します。誰かが回避策を持っていますか?たとえば、アレイのサイズを6600に制限すると、期待される結果が得られます。私は、部分配列で複数のjson呼び出しを行い、結果を連結することもできますが、それは適切につなぎ合わせるためのファンキーな文字列操作を必要とします。json_encodeは6670個以上の行をエンコードしません
答えて
ですが、おそらくあなたのPHPのバージョンやPHPで使用するために許可されたメモリに依存していることがわかります(とおそらく配列内のすべてのデータの実際のサイズも)。 指定された配列のサイズをチェックし、次にエンコードする小さな部分を分割し、すべての部分がエンコードされるまでこれを続けてから、再び結合する関数を作成します。これがルートであれば、この回答にコメントを投稿し、おそらく私はそれを手伝うことができます。 (これはNytrixによって回答に基づいている) EDIT、以下の例:
function encodeArray($array, $threshold = 6670) {
$json = array();
while (count($array) > 0) {
$partial_array = array_slice($array, 0, $threshold);
$json[] = ltrim(rtrim(json_encode($partial_array), "]"), "[");
$array = array_slice($array, $threshold);
}
$json = '[' . implode(',', $json) . ']';
return $json;
}
乾杯!私のwhile-whackの代わりにforループの選択肢はやや良いと思うが、 whileループで数え切れないほどカウントダウンしている感じがします^^ –
短くて甘い。私はそれが好きです。私はまだこれをテストしていませんが、「チャンク」の間のカンマを省略することができると思います。 (もしそうなら、簡単に修正する)もう一度おねがいします。 –
私は実際にこのコードをテストしましたが、有効な 'json'やその他のものを投げ捨てるわけではありません。テストしてみてください(http://sandbox.onlinephpfunctions.com/code/58cecc502255d0800d742bf9e02e65208b73d47b)オンライン – Nytrix
いつも最初にslice
の配列を2つの部分に分けることができます。その後、それをエンコードし、再び一緒に追加します。解決策でない場合は、メモリの上限を増やす必要があります。
ここに例があります。それはhereです。 @ GeertvanDijkの提案では、これを柔軟な機能にして、機能性を高めるようにしました!
これで、6,670個以上の行をテストしました。オンラインでhereをテストすることもできます。
ここでは、通常のjson_encode()
を100万行テストしましたが、問題はありません。しかし、私はまだこれがあなたの問題を解決することを願っています...
メモリが足りなくなった場合、
memory_limit
をより高い値に設定することができます。私はこれに反して、代わりにデータを部分的に取り出し、部分的にデータを処理します。このデータをどのように取得するのか分からないので、それをどのように規制するのか例を挙げることはできません。必要に応じてメモリを変更する方法があります(唯一のオプションで、それでも "良い"場合もあります)。この場合
ini_set("memory_limit","256M");
、それはデフォルトからデュッベルである、あなたはそれが128M
this documentationで
- 1. json_encodeが動作しません(これ以上)
- 2. json_encodeは改行をエスケープしません
- 3. JSON_ENCODEは大きな配列をエンコードできません
- 4. DataTableに9個以上の列を定義できません。
- 5. 10個以上のmqueueを作成できません
- 6. マルチセレクションのUICollectionViewは12個以上のアイテムを選択しません
- 7. Bubblesortは254859個以上の要素をソートしません - なぜですか?
- 8. OnRenderメソッドは144個以上のコントロールでは機能しません
- 9. php json_encodeは何も返しません
- 10. 15個以上のサブクエリを解決する方法サブクエリは1行以上のエラーを返しますエラー
- 11. Swiftコレクションビューには6個以上のアイテムが追加されませんか?
- 12. 個別の値以上(破)
- 13. jqueryクッキーから23個以上の項目をロードできません
- 14. Castle Windsorはゼロ個以上の実装を解決します
- 15. 10個以上のRSSフィードを混在させる方法は?
- 16. テーブル内のWordpressループは3行以上を追加しません
- 17. HTMLテーブルCSVへのエクスポートは50行以上をエクスポートしません。
- 18. json_encodeを読み取れません
- 19. Qtは '+'記号をエンコードしません
- 20. JSONはNSObjectをエンコードしませんか?
- 21. DTは最初のx個の行を表示しません
- 22. 100個以上の列を持つR行列
- 23. Rは4GB以上のメモリを使用していません
- 24. Socket.ioは1つ以上のイベントを出力しません
- 25. WPFは1つ以上のRichTextBoxを許可しません
- 26. PHPで30個以上のファイルをアップロード
- 27. BQテーブルから15k行以上をフェッチできません
- 28. 150行以上を挿入できません
- 29. json_encode()はアラビア語を表示しません(opendir)
- 30. PHP json_encodeは適切な結果を出力しません
あなたはいつ、どのようにこの問題が発生した実証PHPコードの最小限の例を提供してもらえますか? – Pete
PHPのメモリ制限を増やしてみましたか? – AmericanUmlaut
最大深さを確認しましたか? –