2016-10-03 173 views
0

我試圖通過一個JSON來發布我的PHP後端。該JSON看起來是這樣的:在PHP中循環遍歷一個JSON

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

我張貼從郵差,像這樣:

enter image description here

我希望能夠打印每次我單獨發佈使用數量

echo $number; 

現在,當我使用以下它只是打印最後一個號碼:

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

My功能:

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() 

PHP內置函數用於通過解碼JSON回PHP變量或數組,然後循環每個索引和打印號碼。

+0

當我嘗試json_decode($ json)時,我收到:消息:json_decode()期望參數1是字符串,給定的數組。我不是通過郵差發送JSON嗎? –

+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

說明

首先字符串化的JSON,比使用JSON_DECODE()函數,它給你的數組使用foreach循環,這將給你要呼應每個鍵在這個陣列上之後迭代。

代碼

   $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

你現在可以根據我的回答測試。 –