PHP计算JSON数组长度

14

我在 Stack Overflow 上搜索了,但未能找到答案。我的 PHP 脚本通过 HTTP POST 接收一些 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 输出的是'1'而不是'3'。

4个回答

18

尝试使用echo count($task_array['task']);

通常,如果你想知道变量$var的值的结构,请执行

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

相对于其他选项,如serializeprint_r,这个函数的优点在于它打印出来的是PHP代码(因此可以被任何了解PHP语言的人读懂(如果您使用PHP编程,那么可能是这样))。var_export 的缺点是它不能处理循环结构(例如$a->b == $a),但JSON也不能处理。


抱歉我的错误,还有一个问题,当只有1个任务而不是3个时,它会显示有6个任务。 - Buneme Kyakilika
你对数据结构的解释有误。你试过我的 var_export 提示了吗? - Oswald

5

好的,这里有一个包含3个元素的数组,整个数组被归纳为一个名为"task"的元素。

尝试一下。

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

编辑:

请使用以下代码以正确的方式打印数组

echo '<pre>';
print_r($task_array['task']);
exit();

抱歉我的错误,还有一个问题,当只有1个任务而不是3个时,它会显示有6个任务。 - Buneme Kyakilika
1
@Coder101,看看你的数组,有一个名为task的数组,其中有3个数组,然后在每个数组中都有6个元素。 - Deepanshu Goyal

5
$task_array = json_decode($json_tasks);
count($task_array->task);

例子:3

来自台湾


1

尝试这段代码,这里我可以计算具有特定值的对象数量。

这是我的 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接