2017-04-22 1 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

할 기운 다. 두 번째 for 루프는 필요하지 않습니다.

$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 배열로 루핑하는 것은 힘들 것 같습니다. 우리는 루프에도 사용할 수 있습니까? thanks –

+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

작동하지 않습니다 .. 그것은 내가 생각 루프에 들어가기 아닙니다. echo 명령을 인쇄하지 않습니다. –

+0

이 코드가 작동합니까? 어쩌면 당신의 data.json이 다른 디렉토리에 있을까요? 그리고 그것은 오류를 표시합니까? – getl0st

+0

문제는 루프가있는 것입니다. 하나의 루프 만 있으면됩니다. 지금은 모든 json 배열에 대해 더 낮은 값과 더 높은 값을 인쇄합니다. –

관련 문제