2013-07-01 49 views
0

我是一個CakePHP的2.x的工作,我是來自機器人的JSON fromat我怎麼能提取這個數組PHP或CakePHP的

我得到我的$數據數據將數據發送到我的web應用程序變量,當我的print_r數據

 
    Array (
    [sms] => [[+16063934284, hello, 1, 1372671157000]] 
) 

我想訪問此數組的每個元素或要每個元素保存在一個單獨的可變..例如,我想這樣做

$number = ['sms'][0] 

抱歉,我在本週的陣列,所以不要我怎麼辦裏面$data['sms']

+0

最有可能你都提交您的數據錯了,不能正確解析它 - 在討論的陣列的事情是(可能,很難說,因爲沒有引號)一個字符串。 – AD7six

回答

0

你的JSON數據是不正確的JSON。您需要手動解析此字符串或在您的Android應用程序中生成正確的json。 如果要分析你的數據使用下面的代碼:

$sms = str_replace('[[', '', $data['sms']); 
$sms = str_replace(']]', '', $sms); 
$sms = explode(', ', $sms); 
print_r($sms); 

正如你在輸出$短信看到的是與你的所有屬性的數組。

+0

正在獲取數據在JSON ..當我解碼數據,然後我得到以下結果,我有我的問題。我應該再次解碼 – hellosheikh

+0

是的,你shuold解碼你的'$ data ['sms']' –

+0

我更新了我的答案。覈實。 –

1

這不是有效的JSON,如果你的回答是這樣的:

[短訊] => [ '16063934284', '你好',1,1372671157000]

現在你可以使用json_decode functon,這樣,那麼你將有以下:

Array 
(
    [0] => Array 
     (
      [0] => 16063934284 
      [1] => 123 
      [2] => 1 
      [3] => 1372671157000 
     ) 

) 

左右後,您可以使用foreach()通過箇中的元素進行迭代新陣列。

這裏是一個工作示例:

+0

我在json中獲取數據..當我解碼數據然後我得到以下結果,我有我的問題... – hellosheikh

+0

那麼,json_decode($ data)的結果是什麼? – vitozev

+0

Array( [sms] => [[+16063934284,hello,1,1372671157000]] ) – hellosheikh

1

我不知道你是如何構建的數據,但你應該能夠將其分配到像這樣的列表:

foreach ($data['sms'] as $row) { 
    list($number, $message, $param3, $param4) = $row; 
} 

但對於一些原因你似乎有一個數組(與兩個打開方括號中)的陣列,它實際上是這樣的:

foreach ($data['sms'] as $row) { 
    list($number, $message, $param3, $param4) = $row[0]; 
} 

無論哪種方式,你就可以只訪問環路六數所涉及的變量名:

foreach ($data['sms'] as $row) { 
    list($number, $message, $param3, $param4) = $row[0]; 
    printf('Number is %s', $number); 
} 
+0

你的代碼給了我很多錯誤 – hellosheikh

+0

這是因爲你不會逐字使用它。我不知道你的數據來自你的Android應用程序的格式。 –

0

可以使用爆炸()函數,將這些值在陣列分離。

explode(Array_name); 
0

如果從應用程序發送適當的JSON,你可以簡單地使用$array = json_decode($data['sms']) 正確的JSON字符串看起來像[["+16063934284", "hello", 1, 1372671157000]] 注意「,而不是'(報價VS單引號)是JSON格式很重要,很抱歉Kristian Vitozev。另請注意,如果SMS消息包含逗號,則在','上使用爆炸將會中斷。

這裏是一個代碼示例:

$sms_list = json_decode($data['sms']); 
foreach($sms_list as $sms){ 
    list($phone_number, $message, $unknown_bool, $timestamp) = $sms; 
    //... 
}