95

組み込みjson_encode();関数を使用して作成した配列をエンコードしました。私は次のような配列の配列の形式でそれを必要としています:

[["Afghanistan",32,12],["Albania",32,12]]

ただし、次のように返されます。

{"2":["Afghanistan",32,12],"4":["Albania",32,12]}

正規表現のトリックを使用せずにこれらの行番号を削除するにはどうすればよいですか?

4

4 に答える 4

198

PHP配列の配列キーが連続した数値でない場合、JavaScript配列は常に連続して数値でインデックス付けされるため、他の配列をオブジェクトにするjson_encode() 必要があります。

PHPの外部構造で使用array_values()して、元の配列キーを破棄し、ゼロベースの連続番号に置き換えます。

例:

// Non-consecutive 3number keys are OK for PHP
// but not for a JavaScript array
$array = array(
  2 => array("Afghanistan", 32, 13),
  4 => array("Albania", 32, 12)
);

// array_values() removes the original keys and replaces
// with plain consecutive numbers
$out = array_values($array);
json_encode($out);
// [["Afghanistan", 32, 13], ["Albania", 32, 12]]
于 2012-07-30T12:59:36.403 に答える
21

json_encode()関数は、phpで配列JSONにエンコードするのに役立ちます。

特定のオプションを指定せずにjson_encode関数のみを直接使用すると、配列が返されます。上記の質問のように

$array = array(
  2 => array("Afghanistan",32,13),
  4 => array("Albania",32,12)
);
$out = array_values($array);
json_encode($out);
// [["Afghanistan",32,13],["Albania",32,12]]

配列をJSONに変換しようとしているので、json_encodeの追加オプション(パラメーター)としてJSON_FORCE_OBJECTを使用することを勧めます。

<?php
$array=['apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"} 
?>
于 2018-04-23T19:26:51.547 に答える
4

Michael Berkowskiの回答に追加したいのですが、これは配列の順序が逆の場合にも発生する可能性があります。この場合、jsonオブジェクトでは順序が昇順になるため、問題を観察するのは少し難しいです。

例えば:

[
    3 => 'a',
    2 => 'b',
    1 => 'c',
    0 => 'd'
]

戻ります:

{
    0: 'd',
    1: 'c',
    2: 'b',
    3: 'a'
}

したがって、この場合の解決策は、array_reversejsonにエンコードする前に使用することです

于 2016-11-01T15:52:53.393 に答える
2

PHP配列をJSONに変換するときに、アクセント付き文字に問題がありました。私はUTF-8のものをあちこちに配置しましたが、配列をプッシュしていたPHPのwhileループにこのコードを追加するまで、問題は解決しませんでした。

$es_words[] = array(utf8_encode("$word"),"$alpha","$audio");

問題を引き起こしたのは「$word」変数だけでした。その後、jason_encodeは問題なく実行されました。

お役に立てば幸い

于 2020-06-26T22:51:53.987 に答える