JSON PHP foreach Проблема разбора?

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

Вот 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 идет квалификация / доступ, а затем текст ответа и раздел находятся на том же уровне, что и прежняя фирма.

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

1

Решение

Вот пример 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

Надеюсь, это поможет

4

Другие решения

{
"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>';

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

-2

По вопросам рекламы [email protected]