2013-10-26 108 views
5

我尋覓左右,但無法找到一個answer.My PHP腳本是通過接收HTTP POST一些JSON,看起來像這樣:PHP計數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' 。

回答

11

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

一般來說,如果你想知道的變量$var值的結構,在替代品,如serializeprint_r是做這個功能的

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

優勢,它可以打印PHP代碼(因此,任何懂PHP的人都可以閱讀這些代碼(如果你使用PHP編程,那很可能))。 var_export的缺點是,它無法處理循環結構(例如,如果$a->b == $a),但JSON都不能。

+0

對不起我的錯,多了一個問題的探析即使世界上只有1個任務,而不是3,它說有6個任務 – AndroidDev

+0

您錯誤地解釋數據結構。你嘗試過關於'var_export'的提示嗎? – Oswald

2

3項目在1項目"task"所以,你必須一個陣列命名的任務,並在3個元素是它

嘗試

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

編輯:

請使用下面的代碼以正確的模式打印數組

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

對不起我的錯誤,更多的時候只有1個任務,而不是3,它說有6個任務 – AndroidDev

+0

@ Coder101請檢查編輯 –

+1

@ Coder101以及只是看看你的數組,有一個數組**任務**其中有3個數組,然後在每個數組中有3個數組有6個元素 –

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

EX: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