2016-10-03 3 views
0

Я пытаюсь пропустить JSON, который я отправляю на свой PHP-сервер. JSON выглядит следующим образом:Looping через JSON в PHP

[ 
    { 
     "number":"5613106" 
    }, 
    { 
     "number":"56131064" 
    }, 
    { 
     "number":"56131063" 
    } 
] 

я его из Почтальон так:

enter image description here

Я хочу, чтобы иметь возможность печатать каждый номер, который я отправил индивидуально с помощью

echo $number; 

Прямо сейчас, когда я использую следующее, он просто печатает последний номер:

$number = $json['number']; 
echo $number; 

Моя функция:

public function check_users_post() 
{ 
    $json = $this->request->body; 
    print_r($json); 
    $this->response($json, REST_Controller::HTTP_OK); 
} 

Выход:

Array 
(
    [0] => Array 
     (
      [number] => 5613106 
     ) 

    [1] => Array 
     (
      [number] => 56131064 
     ) 

    [2] => Array 
     (
      [number] => 56131063 
     ) 

) 
+0

Возможный дубликат [Как декодировать JSON строки] (HTTP: //stackoverflow.com/questions/2543389/how-to-decode-a- json-string) – jitendrapurohit

ответ

1

Понял сделать так:

public function check_users_post() 
{ 
    $json = $this->request->body; 

    $jsonIterator = new RecursiveIteratorIterator(
     new RecursiveArrayIterator($json), 
     RecursiveIteratorIterator::SELF_FIRST); 

    $phone_numbers = ""; 

    foreach ($jsonIterator as $key => $val) { 
     if(is_array($val)) { 

     } else { 
      $phone_numbers = "$phone_numbers" . ", " . "$val"; 
     } 
    } 

    $phone_numbers = substr($phone_numbers, 2); 
    $phone_numbers = "(" . $phone_numbers . ")"; 

    $query = $this->db->query("SELECT * FROM users WHERE user_number in $phone_numbers;"); 
    $result = $query->result(); 
    $this->response($result, REST_Controller::HTTP_OK); 

    if (mysql_num_rows($result)==0) { 
     $data = [ 'message' => 'No users returned']; 
     $this->response($data, REST_Controller::HTTP_BAD_REQUEST); 
    } else { 
     $this->response($result, REST_Controller::HTTP_OK); 
    } 
} 
1

Применение

json_decode() 

РНР встроенную функцию для декодирования JSON обратно в переменную PHP или массива, а затем цикл по каждый индекс и номер печати.

+0

Когда я пытаюсь json_decode ($ json), я получаю: Message: json_decode() ожидает, что параметр 1 будет строкой, задан массив. Разве я не отправляю json через Postman уже? –

+0

@ RutgerHuijsmans, если вы это делаете, вы уже читаете JSON-декодирование, поэтому отправляйте свой полный код и делайте 'print_r ($ json);', чтобы увидеть, что внутри '$ json', потому что кажется, что это уже массив. .. – matiaslauriti

+0

попробуйте это, json_decode ($ json [0]). – Sagar

2

Надеюсь, что этот универсальный итератор поможет вам.

$jsonIterator = new RecursiveIteratorIterator(
     new RecursiveArrayIterator(json_decode($json, TRUE)), 
     RecursiveIteratorIterator::SELF_FIRST); 


foreach ($jsonIterator as $key => $val) { 
    if(is_array($val)) { 
     echo "$key:\n"; 
    } else { 
     echo "$key => $val\n"; 
    } 
} 
+0

Я использовал часть вашего ответа, чтобы ответить на мой окончательный ответ. Благодаря! –

0

Описание

Первого stringify вашего JSON, чем использовать json_decode() функцию, которая дает вам массив после итерации на массиве с помощью цикла Еогеаспа, который даст вам каждый ключ, который вы хотите повторить ,

Код

   $str = '[ 
        { 
        "number":"5613106" 
        }, 
        { 
        "number":"56131064" 
        }, 
        { 
        "number":"56131063" 
        } 
       ]'; 
      $array = json_decode($str, true); 
      echo "<pre>"; 
      foreach ($array as $key => $key_value) { // then loop through it 
       echo "<br>"; 
       echo $array[$key]['number']; 
       echo "<br>"; 
      } 

Выход

5613106 

56131064 

56131063 
+0

Как укрепить мой JSON? –

+0

вы можете проверить в соответствии с моим ответом. –

Смежные вопросы