2013-07-01 2 views
0

Я работаю на CakePHP 2.x и я посылаю данные из андроида на мой веб-приложение в JSon fromatкак я могу извлечь этот массив PHP или CakePHP

я получаю данные в моих $ данных переменная, когда я print_r данные

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

я хочу, чтобы получить доступ к каждому элементу этого массива или хотите сохранить каждый элемент в отдельной переменной .. например я хочу сделать что-то вроде этого

$number = ['sms'][0] 

извините я неделя в массивах, так что не как я могу это сделать

+0

, скорее всего, вы оба Предоставляя свои данные так, а не разбор его правильно - Массив-вещь в этом вопросе не будет (вероятно, трудно сказать, так как есть нет кавычки) строки. – AD7six

ответ

0

Данные JSon внутри $data['sms'] не является правильным JSON. Вам нужно вручную разобрать эту строку или создать правильный json в своем приложении для Android. Если вы хотите, чтобы разобрать ваши данные использовать следующий код:

$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 .. когда я декодирую data, то я получаю следующий результат, который у меня есть в моем вопросе ... – 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]; 
} 

в любом случае, вы можете просто получить доступ к числу в VI петлевого имя переменной:

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]] Обратите внимание, что "вместо" (цитата против апострофа) имеет важное значение для JSON форматирования, извини Кристиан Витозов. Также обратите внимание, что использование взрыва в ',' будет нарушено, если SMS-сообщение содержит запятую.

Вот пример кода:

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