2016-04-13 6 views
1

Итак, я пытаюсь вернуть несколько полей из строки JSON с помощью PHP, но всякий раз, когда я пытаюсь использовать foreach дважды, второй не отображается. Данные JSON имеют некоторую информацию, которая возвращает переменное количество полей, и я хочу, чтобы она могла вернуть 1 или 10, если это необходимо. Код, который я до сих пор отлично работает для этого, но когда я иду, чтобы вернуть другой foreach после него, ничего не появляется. Если добавить поля я пытаюсь включить во втором Еогеаспе к первым, тогда иногда много дополнений создаются на основе от первых полеев возвращает время, возможно, 10.JSON PHP foreach Parsing Issue?

Вот PHP

foreach($decoded_results['sam_data']['registration']['qualifications']['acass']['answers'] as $acass) 
{ 
    echo '<strong>ACASS Answer Text: </strong>' . ($acass['answerText'] ? 'Yes' : 'No') .'</br>'; 

    echo '<strong>ACASS Section: </strong>&nbsp&nbsp&nbsp'.$acass['section'].'</br>'; 

} 

foreach($decoded_results ['sam_data']['registration']['qualifications']['acass']['answers']['FormerFirm'] as $formerfirm) 
{ 

    echo '<strong>Former Firm ID: </strong>&nbsp&nbsp&nbsp'.$formerFirm['id'].'</br>'; 

    echo '<strong>Former Firm Year Established: </strong>&nbsp&nbsp&nbsp'.$formerFirm['yearEstablished'].'</br>'; 

} 

Вот JSON

"qualifications": { 

     "acass": { 

      "id": "SF330", 

      "answers": [ 

       {}, 

       { 

       "answerText": "Yes", 

       "section": "SF330.2" 

       }, 

       { 

       "FormerFirm": { 

        "id": 1, 

        "yearEstablished": aaaaaaaaa, 

        "name": "aaaaaaaaaaa", 

        "duns": aaaaaaaaaa 

       }, 

структура JSON идет квалификации/acass, а затем answertext и секции находятся на том же уровне, что бывший фирмы.

Любая помощь, которую вы, ребята, очень цените. Спасибо за ваше время.

+0

Просьба указать действительное ** JSON **, которое вы декодируете –

+0

{"sam_data": {"registration": {"govtBusinessPoc": {"lastName": "EAVES", "title": "OFFICE MANAGER", " адрес ": {" zip ":" 72301 "," countryCode ":" USA "," line1 ":" 207 West Bond Ave. "," stateorProvince ":" AR "," city ":" West Memphis "}, "электронная почта": "[email protected]", "usPhone": "8707356502", "Имя": "KELLY"}, "квалификация": { "acass": { "ID": "SF330", "ответы" : [{ "answerText": "SF330.1": "Да", "раздел"} { "answerText": "Да", "раздел": "SF330.2"}, { "FormerFirm": { "ID «: 1,« yearEstablished »: 1968,« name »:« Fowler/Garey Architects, PA »,« duns »: 960604007} –

+0

@JohnChase the Json, который вы предоставили выше, не является действительным json, прежде всего, чтобы его декодировать –

ответ

4

Вот пример JSON

{ 
    "sam_data": { 
    "registration": { 
     "govtBusinessPoc": { 
     "lastName": "EAVES", 
     "title": "OFFI‌​CEMANAGER", 
     "address": { 
      "zip": "72301", 
      "countryCode": "USA", 
      "line1": "207 West Bond Ave.", 
      "stateorProvince": "AR", 
      "city": "West Memphis" 
     }, 
     "email": "[email protected]", 
     "usPhone": "8707356502", 
     "firstName": "KE‌​LLY" 
     }, 
     "qualifications": { 
     "acass": { 
      "id": "SF330", 
      "answers": [ 
      { 
       "answerText": "Yes", 
       "section": "SF330.1" 
      }, 
      { 
       "answerText": "Yes", 
       "section": "SF330.2" 
      }, 
      { 
       "FormerFirm": { 
       "id": 1, 
       "yearEstablished": 1968, 
       "name": "Fowler/Garey Architects, P.A.", 
       "duns": 960604007 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Чтобы отобразить его правильно PHP

# convert to array 
# $data = json data 
$decoded_results = json_decode($data, true); 

$answers = $decoded_results['sam_data']['registration']['qualifications']['acass']['answers']; 

foreach ($answers as $key => $acass) { 

    if (isset($acass['answerText']) && isset($acass['section'])) { 

     echo '<strong>ACASS Answer Text: </strong>' . ($acass['answerText']) .'</br>'; 

     echo '<strong>ACASS Section: </strong>&nbsp&nbsp&nbsp'.$acass['section'].'</br>'; 
    } 
} 

# get the FormerFirm 
# using the array index of answers[2]; 
$formerfirm = $decoded_results['sam_data']['registration']['qualifications']['acass']['answers'][2]['FormerFirm']; 

    echo '<strong>Former Firm ID: </strong>&nbsp&nbsp&nbsp'.$formerfirm['id'].'</br>'; 

    echo '<strong>Former Firm Year Established: </strong>&nbsp&nbsp&nbsp'.$formerfirm['yearEstablished'].'</br>'; 

Выход ::

ACASS Answer Text: Yes 
ACASS Section: SF330.1 
ACASS Answer Text: Yes 
ACASS Section: SF330.2 
Former Firm ID: 1 
Former Firm Year Established: 1968 

Надеется, что это поможет

+0

Этот код не содержит скобок или символов? Когда я ввожу его в свой php и загружаю страницу, ничего не происходит. Спасибо, что нашли время ответить! –

+0

json, который был предоставлен, является недействительным json, поэтому я исправил его, отсутствуют закрывающие скобки –

+0

Хм, поэтому я попробовал код, и он работает. Я ценю, что много, но еще одна проблема, которую я ударил, была фактом, если я повторяю этот код для анализа элементов ниже тех, которые я цитировал, они работают, но только если возвращается один набор данных для каждого элемента. Если несколько возвращений, это не сработает. –

-2
{ 
    "sam_data": { 
    "registration": { 
     "govtBusinessPoc": { 
     "lastName": "EAVES", 
     "title": "OFFI‌​CEMANAGER", 
     "address": { 
      "zip": "72301", 
      "countryCode": "USA", 
      "line1": "207 West Bond Ave.", 
      "stateorProvince": "AR", 
      "city": "West Memphis" 
     }, 
     "email": "[email protected]", 
     "usPhone": "8707356502", 
     "firstName": "KE‌​LLY" 
     }, 
     "qualifications": { 
     "acass": { 
      "id": "SF330", 
      "answers": [ 
      { 
       "answerText": "Yes", 
       "section": "SF330.1" 
      }, 
      { 
       "answerText": "Yes", 
       "section": "SF330.2" 
      }, 
      { 
       "FormerFirm": { 
       "id": 1, 
       "yearEstablished": 1968, 
       "name": "Fowler/Garey Architects, P.A.", 
       "duns": 960604007 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
To display it properly PHP 

# convert to array 
# $data = json data 
$decoded_results = json_decode($data, true); 

$answers = $decoded_results['sam_data']['registration']['qualifications']['acass']['answers']; 

foreach ($answers as $key => $acass) { 

    if (isset($acass['answerText']) && isset($acass['section'])) { 

     echo '<strong>ACASS Answer Text: </strong>' . ($acass['answerText']) .'</br>'; 

     echo '<strong>ACASS Section: </strong>&nbsp&nbsp&nbsp'.$acass['section'].'</br>'; 
    } 
} 

# get the FormerFirm 
# using the array index of answers[2]; 
$formerfirm = $decoded_results['sam_data']['registration']['qualifications']['acass']['answers'][2]['FormerFirm']; 

    echo '<strong>Former Firm ID: </strong>&nbsp&nbsp&nbsp'.$formerfirm['id'].'</br>'; 

    echo '<strong>Former Firm Year Established: </strong>&nbsp&nbsp&nbsp'.$formerfirm['yearEstablished'].'</br>'; 

Решил проблему, столкнулся с другой проблемой, но для этой проблемы это было решением. Спасибо Oli Soproni B!