3

json配列の配列キーを整数にする必要があります。今、それらは文字列です。私の間違いはどこにあるのか教えていただけますか?

   $i = 0;
   while($i < 7) {
       isset($ips[date('d', $week_start + $i * 86400)])
           ? $ips[(int)date('d', $week_start + $i * 86400)] = count(date('d', $week_start + $i * 86400))
           : $ips[(int)date('d', $week_start + $i * 86400)] = 0;

       isset($time[date('d', $week_start + $i * 86400)])
           ? $time[(int)date('d', $week_start + $i * 86400)] = count(date('d', $week_start + $i * 86400))
           : $time[(int)date('d', $week_start + $i * 86400)] = 0;

       $i++;
   }

   return json_encode(array('unique' => $time, 'impressions' => $ips));
4

2 に答える 2

2

json_encodeあなたが望むものは、またはjsonフォーマットでは不可能です

この2つの配列を見てください

$array = array("A","B","C","D");
$array2 = array(2=>"A",7=>"B",11=>"C",70=>"D");

走る

 var_dump($array,$array2);

出力

array
  0 => string 'A' (length=1)
  1 => string 'B' (length=1)
  2 => string 'C' (length=1)
  3 => string 'D' (length=1)
array
  2 => string 'A' (length=1)
  7 => string 'B' (length=1)
  11 => string 'C' (length=1)
  70 => string 'D' (length=1)

PHPあなたは両方で見ることができますArray

今すぐ実行

 var_dump(json_encode($array),json_encode($array2));

出力

string '["A","B","C","D"]' (length=17)
string '{"2":"A","7":"B","11":"C","70":"D"}' (length=35)

結論

配列キーを設定していて、それらのキーが最初から0連続して増加しない場合は、jsonオブジェクトとしてエンコードされます

配列だけが必要な場合

 var_dump(json_encode(array_values($array2)));

出力

 string '["A","B","C","D"]' (length=17)
于 2012-04-30T15:41:30.097 に答える
2

オブジェクトのキーは文字列である必要があります。文字列を使用しない場合は、0から始まる連続した整数キーを使用する必要があります。これにより、代わりに配列が作成されます。

于 2012-04-30T15:43:43.993 に答える