2017-04-22 101 views
0

你好,我有一個包含數組結構的json數組。我正在嘗試針對某個特定的密鑰獲取該值。就像獲得一個名字較低且值爲9226的鍵一樣。我已經爲每個循環實施了,但是我無法進入它。我的比較聲明中有一些問題。從json數組中獲取數據並比較

{ 
"tax_structure": [ 
    { 
     "tax_data": { 
      "lower": 0, 
      "upper": 9225, 
      "tax_rate": 10, 
      "amount": 0 
     } 
    }, 
    { 
     "tax_data": { 
      "lower": 9226, 
      "upper": 37450, 
      "tax_rate": 15, 
      "amount": 922.50 
     } 
    } 
] 
} 

php文件:

<?php 
     $expense=10000; 

$str_data = file_get_contents("data.json"); 
$data = json_decode($str_data,true); 

foreach ($data["tax_structure"] as $tax_data) { 
    foreach ($tax_data["tax_data"] as $key => $value) { 
     if($key=="lower" && $expense>$value) & ($key=="upper" &&$expense<$value) 
     { 
      //do something if expenses value falls between the lower and upper limit values of keys 
     } 

    } 
    } 
    ?>  

回答

0

我相信你正在尋找的東西像下面這樣。 第二個循環沒有必要。

$expense = 10000; 

$str_data = file_get_contents("data.json"); 
$data = json_decode($str_data,true); 

foreach ($data["tax_structure"] as $tax_data_object) { 
    if($tax_data_object['tax_data']['lower'] < $expense && $tax_data_object['tax_data']['upper'] > $expense){ 
     // Do stuff 
    } 
} 

編輯

你應該嘗試print_r($data);。這將顯示數據數組的結構。

如果您檢查數據的結構,上面的代碼應該很明顯。

如果不是,這裏是進一步學習的幾個來源:

PHP: Arrays

JSON introduction

+0

感謝它的工作。推理邏輯。如果你能解釋,循環進入json數組似乎很難。我們也可以使用for循環。謝謝 –

+0

你可以理論上在這種情況下使用for循環,但這樣做沒有優勢。它需要更多的代碼,速度會更慢。 – Thakkie

0
<?php 
$expense = 10000; 

$str_data = file_get_contents("data.json"); 
$data  = json_decode($str_data, true); 

foreach ($data["tax_structure"] as $tax_data) { 
    foreach ($tax_data["tax_data"] as $key => $value) { 

     if ($key == "lower" && $expense > $value) { 

      echo "Key is lower and the value is " . $value . "<br>"; 
     } 

     if ($key == "upper" && $expense < $value) { 

      echo "Key is upper and the value is " . $value . "<br>"; 
     } 
    } 
} 
?> 

你不能做到這一點if($key=="lower" && $expense>$value) & ($key=="upper" &&$expense<$value)

+0

它不工作..它沒有進入循環我猜。它不打印迴應命令。 –

+0

此代碼是否有效?也許你的data.json位於不同的目錄中?它是否顯示錯誤? – getl0st

+0

問題是我們用循環。你只需要一個循環。現在它會打印所有json數組的較低和較高值。 –