0

我正在开发一个 cakephp 2.x,我正在将数据从 android 发送到我的 webapp 中的 json fromat

当我print_r数据时,我在我的$data变量中获取数据

  大批 (
     [短信] => [[+16063934284,你好,1,1372671157000]]
  )
  

我想访问这个数组的每个元素,或者想将每个元素保存在一个单独的变量中。例如,我想做这样的事情

   $number = ['sms'][0]

抱歉,我在数组中度过了一周,所以我该怎么做

4

5 回答 5

1

这不是有效的 JSON,如果您的响应是这样的:

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

现在您可以使用json_decodefuncton,那么您将拥有以下内容:

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

)

所以以后,你可以用它foreach()来遍历新数组的元素。

这是一个工作示例:

于 2013-07-01T10:49:04.267 回答
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);
}
于 2013-07-01T10:53:22.443 回答
0

你里面$data['sms']的json数据不是正确的json。您需要手动解析此字符串或在您的 Android 应用程序中生成正确的 json。如果要解析数据,请使用以下代码:

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

正如您在输出中看到的,$sms 是一个包含所有属性的数组。

于 2013-07-01T10:47:21.810 回答
0

您可以使用explode()函数来分隔数组中的值。

explode(Array_name);
于 2013-07-01T10:58:55.043 回答
0

如果您从应用程序发送正确的 JSON,您可以简单地使用$array = json_decode($data['sms']) 正确的 JSON 字符串将如下所示[["+16063934284", "hello", 1, 1372671157000]] 注意“而不是 '(引号与撇号)对 JSON 格式很重要,抱歉 Kristian Vitozev。还请注意,在 ' 上使用爆炸, ' 如果 SMS 消息包含逗号,则会中断。

这是一个代码示例:

$sms_list = json_decode($data['sms']);
foreach($sms_list as $sms){
    list($phone_number, $message, $unknown_bool, $timestamp) = $sms;
    //...
}
于 2013-07-01T21:25:27.537 回答