【发布时间】:2017-08-13 14:53:24
【问题描述】:
我正在尝试使用 array_filter 过滤某些值并禁止其余值。我以前从未使用过array_filter,所以我一直在努力解决这个问题。
在循环之前我是否需要先过滤这些值?如果需要,我将如何过滤数组以仅查找这些值。
这是我目前正在使用的 sn-p,它正在消除错误。 $alerts 是我只需要从数组中返回的值,而不允许其余的值。然后我遍历过滤后的结果。在我看来,这似乎是合乎逻辑的,但我确信我错过了一些东西,因为它不起作用。
$data = file_get_contents($url); // put the contents of the file into a variable
$results = json_decode($data, true); // decode the JSON feed
$alerts = array(Tornado Warning, Severe Thunderstorm Warning, Flash Flood Warning, Flood Warning);
$selected_events = array_filter($results['features'], function($data) {
return $data === $alerts;
});
//Lets loop through the array
foreach($selected_events as $currFeature)
{
$event = $currFeature['properties']['event'];
$wfo = $currFeature['properties']['sender'];
$area = $currFeature['properties']['areaDesc'];
$expires = $currFeature['properties']['expires'];
这是我正在使用的 JSON 示例。
{
"@context": [
"https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld",
{
"wx": "https://api.weather.gov/ontology#",
"@vocab": "https://api.weather.gov/ontology#"
}
],
"type": "FeatureCollection",
"features": [
{
"id": "https://api.weather.gov/alerts/NWS-IDP-PROD-2485744-2320592",
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-96.77,
33.84
],
[
-96.76,
33.82
],
[
-96.71,
33.83
],
[
-96.52,
33.82
],
[
-96.5,
33.77
],
[
-96.43,
33.78
],
[
-96.38,
33.73
],
[
-96.39,
33.45
],
[
-96.42,
33.46
],
[
-96.94,
33.54
],
[
-96.94,
33.85
],
[
-96.77,
33.84
]
]
]
},
"properties": {
"@id": "https://api.weather.gov/alerts/NWS-IDP-PROD-2485744-2320592",
"@type": "wx:Alert",
"id": "NWS-IDP-PROD-2485744-2320592",
"areaDesc": "Grayson",
"geocode": {
"UGC": [
"TXC181"
],
"SAME": [
"048181"
]
},
"references": [],
"sent": "2017-08-13T13:18:17+00:00",
"effective": "2017-08-13T13:18:17+00:00",
"onset": "2017-08-13T13:18:00+00:00",
"expires": "2017-08-13T16:15:00+00:00",
"ends": "2017-08-13T16:15:00+00:00",
"status": "Actual",
"messageType": "Alert",
"category": "Met",
"severity": "Severe",
"certainty": "Likely",
"urgency": "Expected",
"event": "Flood Warning",
"sender": "NWS Fort Worth TX",
"headline": "Flood Warning issued August 13 at 8:18AM CDT expiring August 13 at 11:15AM CDT by NWS Fort Worth TX",
"description": "The National Weather Service in Fort Worth has issued a\n\n* Flood Warning for...\nGrayson County in north central Texas...\n\n* Until 1115 AM CDT\n\n* At 816 AM CDT, Emergency management reported flooding of several\nroadways across Grayson County. While the heaviest rainfall has\nended...excessive runoff will continue to result in\nstreams...creeks and some rivers exceeding their banks across the\narea.\n\n* Some locations that will experience flooding include...\nSherman, Denison, Whitesboro, Howe, Pottsboro, Collinsville,\nWhitewright, Bells, Tom Bean, Knollwood, Dorchester, Eisenhower\nState Park, southeastern Lake Texoma, Southmayd, Sadler and Luella.",
"instruction": "A Flood Warning means that flooding is imminent or occurring. Water\nrises will generally be gradual, but flooding of some low water\ncrossings and other low-lying areas near rivers, creeks, and streams\nis expected.",
"response": "Avoid",
"parameters": {
"VTEC": [
"/O.NEW.KFWD.FA.W.0008.170813T1318Z-170813T1615Z/"
],
"EAS-ORG": [
"WXR"
],
"PIL": [
"FWDFLWFWD"
],
"BLOCKCHANNEL": [
"CMAS",
"EAS",
"NWEM"
],
"eventEndingTime": [
"2017-08-13T16:15:00Z"
]
}
}
},
【问题讨论】: