12

SO を検索しましたが、答えが見つかりませんでした。私の PHP スクリプトは、次のような http 投稿で JSON を受信して​​います。

{
"task": [
{
  "task_id": "3",
  "task_due": "Oct 26 11:25",
  "task_completed": "FALSE",
  "task_desc": "fff",
  "task_time": "20131026_112531",
  "task_name": "fff"
},
{
  "task_id": "2",
  "task_due": "Oct 26 11:25",
  "task_completed": "FALSE",
  "task_desc": "rff",
  "task_time": "20131026_112522",
  "task_name": "xff"
},
{
  "task_id": "1",
  "task_due": "Oct 26 11:25",
  "task_completed": "FALSE",
  "task_desc": "fggg",
  "task_time": "20131026_112516",
  "task_name": "ff"
  }
 ]}

ご覧のとおり、3 つのアイテムがありますが、それを PHP 配列オブジェクトに変換してアイテムをカウントすると、1 が返されますが、3 になるはずです。これが私の PHP コードです。

$json_tasks = $_POST["json_array"];
$task_array = json_decode($json_tasks,true);
echo count($task_array);

そしてecho count、「3」ではなく「1」を出力します。

4

4 に答える 4

17

試すecho count($task_array['task']);

一般に、変数の値の構造がどうなっているのかわからない場合$varは、

<pre><?php var_export($var, true); ?></pre>

serializeやisなどの代替手段に対するこの関数の利点print_rは、PHP コードを出力することです (したがって、PHP を理解している人なら誰でも読むことができます (PHP でプログラミングする場合はそうなる可能性があります))。の欠点var_exportは、循環構造 ( if$a->b == $aなど) を処理できないことですが、JSON も処理できないことです。

于 2013-10-26T11:24:09.750 に答える
5
$task_array = json_decode($json_tasks);
count($task_array->task);

例:3

台湾から

于 2015-10-12T08:00:26.420 に答える
4

アイテム31アイテム"task"にあるので、タスクという名前の配列が1つあり、3つの要素がその中にあります

試す

echo count($task_array['task']);

編集 :

以下のコードを使用して、配列を正しいパターンで印刷してください

echo '<pre>';
print_r($task_array['task']);
exit();
于 2013-10-26T11:25:10.323 に答える
2

このコードを試してください。ここで、特定の値を持つオブジェクトの数を数えることができます

これが私のdata.jsonファイルの内容です

{"likes":[
    {"user_id":1,"time":"12:04pm"},
    {"user_id":2,"time":"02:04pm"},
    {"user_id":67,"time":"11:04pm"},
    {"user_id":1,"time":"12:04pm"}
]}

ここにphpコードがあります

<?php
$jsonData = file_get_contents("data.json");
$data = json_decode($jsonData,true);
$total = 0;
foreach ($data["likes"] as $value) {
    if($value["user_id"]==1){
        $total = $total+1;
    }
}
echo $total;
?>

出力は

2
于 2016-12-18T02:25:55.070 に答える