Ориентация на определенную часть массива json, если она есть, создать таблицу - PullRequest
1 голос
/ 05 сентября 2010

У меня есть сложный массив json, который я хочу нацелить на конкретную строку / строку и, если он присутствует, добавить небольшую таблицу на веб-страницу ...

Это массив

{
"coastalWarnings":[{
  "loc":"ABEL",
  "warn":"GALE"
  },{
  "loc":"CASTLEPOINT",
  "warn":"STORM"
  },{
  "loc":"CHALMERS",
  "warn":"GALE"
  },{
  "loc":"CHATHAM ISLANDS",
  "warn":"GALE"
  },{
  "loc":"CONWAY",
  "warn":"STORM"
  },{
  "loc":"COOK",
  "warn":"STORM"
  },{
  "loc":"FOVEAUX",
  "warn":"GALE"
  },{
  "loc":"GREY",
  "warn":"GALE"
  },{
  "loc":"MILFORD",
  "warn":"STORM"
  },{
  "loc":"PORTLAND",
  "warn":"GALE"
  },{
  "loc":"PUYSEGUR",
  "warn":"STORM"
  },{
  "loc":"RAGLAN",
  "warn":"GALE"
  },{
  "loc":"RANGITATA",
  "warn":"GALE"
  },{
  "loc":"STEPHENS",
  "warn":"GALE"
  }
  ],
"isAdvisory":true,
"isOutlook":true,
"isVhf":true,
"isWatch":true,
"liftedWarnings":[
  ],
"oceanicWarnings":[{
  "loc":"FORTIES",
  "warn":"GALE"
  },{
  "loc":"PACIFIC",
  "warn":"GALE"
  },{
  "iceAccretion":true,
  "loc":"SOUTHERN",
  "warn":"GALE"
  },{
  "loc":"SUBTROPIC",
  "warn":"GALE"
  }
  ],
"roadSnowWarnings":[
  ],
"severeWarnings":[{
  "loc":"BULLER",
  "warn":["ISSUE"
    ]
  },{
  "loc":"CANTERBURY",
  "warn":["ISSUE"
    ]
  },{
  "loc":"FIORDLAND",
  "warn":["ISSUE"
    ]
  },{
  "loc":"HAWKES BAY",
  "warn":["ISSUE"
    ]
  },{
  "loc":"MANAWATU",
  "warn":["ISSUE"
    ]
  },{
  "loc":"MARLBOROUGH",
  "warn":["ISSUE"
    ]
  },{
  "loc":"NELSON",
  "warn":["ISSUE"
    ]
  },{
  "loc":"OTAGO",
  "warn":["ISSUE"
    ]
  },{
  "loc":"SOUTHLAND",
  "warn":["ISSUE"
    ]
  },{
  "loc":"TAIHAPE",
  "warn":["ISSUE"
    ]
  },{
  "loc":"TARANAKI",
  "warn":["ISSUE"
    ]
  },{
  "loc":"TAUMARUNUI",
  "warn":["ISSUE"
    ]
  },{
  "loc":"TAUPO",
  "warn":["ISSUE"
    ]
  },{
  "loc":"WAIRARAPA",
  "warn":["ISSUE"
    ]
  },{
  "loc":"WAITOMO",
  "warn":["ISSUE"
    ]
  },{
  "loc":"WANGANUI",
  "warn":["ISSUE"
    ]
  },{
  "loc":"WELLINGTON",
  "warn":["ISSUE"
    ]
  },{
  "loc":"WESTLAND",
  "warn":["ISSUE"
    ]
  }
  ],
"thunderstormWarnings":[
  ]
}

Как вы можете видеть, массив разбит на части -

"coastalWarnings"
"liftedWarnings"
"oceanicWarnings"
"roadSnowWarnings"
"severeWarnings"
"thunderstormWarnings"

Я хочу нацелиться на "strictWarnings" и, в частности, на "loc": "CANTERBURY", который отображается как -

  },{
  "loc":"CANTERBURY",
  "warn":["ISSUE"
    ]
  },{

, поэтому, когда он присутствует в массиве, он будет вызывать таблицу, такую ​​как

<table align="center" width="100%" bgcolor="red">
     <tr><td><strong>Severe Weather Warning in effect for CANTERBURY</strong></td></tr>
</table>

Самая большая проблема заключается в том, что массив все время изменяется, так что мне нужно ориентироваться, я думаю, путем поиска конкретных слов или формулировок, если только онбыть надежно разбитым на части.

Может ли что-нибудь столь же простое, как эта работа?

<?
$table = <table align="center" width="100%" bgcolor="red"><tr><td><strong>Severe Weather Warning in effect for CANTERBURY</strong></td></tr></table>;

$file = file_get_contents("filename.ext");
if(!strpos($file, ""loc":"CANTERBURY"")) {
echo $table;
}
?

Не знаете, как это сделать, и мои навыки php довольно ограничены, так что если вы будете так добрычтобы показать мне сценарий или шаг за шагом, как этого добиться, я был бы очень признателен.

Заранее спасибо.

1 Ответ

1 голос
/ 05 сентября 2010

Как предложил Алекс, используйте json_decode

$s = getData(); // returning the string from the question
$data = json_decode($s, true);

foreach( $data['severeWarnings'] as $cw ) {
  if ( 'CANTERBURY'===$cw['loc'] ) {
    foreach( $cw['warn'] as $msg ) {
      echo "-- ", $msg, " --\n";
    }
  }
}

отпечатки -- ISSUE --

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...