PHP - 按值过滤并在循环中省略

时间:2017-08-26 22:09:21

标签: php

我会尽力解释这一点并保持简短。我正在解析一个JSON文件。我已经根据JSON中的键创建了变量并循环遍历它。我已经有一个array_filter来过滤我想要允许的循环中的值。我不确定的是如何更进一步,做另一个检查,并通过不同的键/变量的值禁止。

在我的JSON中,我有这个键/对象......

"geocode": {
                    "UGC": [
                        "TXZ179",
                    ],

现在我为此创建的变量得到这个值就像这样......

$geocode = $currFeature['properties']['geocode']['UGC'][0];

现在,如果您注意到它的值

  

TXZ179

我只需要来自该值的前两个字母,所以我将它剥离下来,只显示前两个字母......

$state = substr($geocode, 0, -4);

这让我从上面得到TX的值。

我解释说要解释一下。我想取这个$ state变量并过滤掉并省略我的循环中的值=来自该变量的TX。

在我遍历解析的JSON之前,我按照我想要显示的值过滤它...

//Lets filter the response to get only the values we want
$alerts = array(
    'Tornado Warning',
    'Severe Thunderstorm Warning',
    'Hurricane Warning',
    'Tropical Storm Warning',
    'Flash Flood Warning',
    'Flood Warning',
);

// filter features, remove those which are not of any of the desired event types
    $alertFeatures = array_filter($features, function(array $feature) use ($alerts) {
    $eventType = $feature['properties']['event'];

    return in_array($eventType, $alerts);
});

// flip alerts, mapping names of alerts to index in array (we'll use it to order)
$order = array_flip($alerts);

// sort elements by order of event type as desired
usort($alertFeatures, function (array $a, array $b) use ($order) {
    $eventTypeA = $a['properties']['event'];
    $eventTypeB = $b['properties']['event'];

    return $order[$eventTypeA] - $order[$eventTypeB];
});

这个问题必须对过滤器OUT做一些特定值,同时已经存在某个值的现有array_filter以及它们如何共存。

所以我的问题是由于缺乏知识。我不确定使用什么函数或如何禁用$ state变量中的TX值。据我所知,array_filter用于过滤掉你想要保留的值。那么如何在我循环抛出它之前用TX删除值并通过第一个array_filter。

1 个答案:

答案 0 :(得分:1)

您可以扩充现有的过滤功能,以便根据地理信息排除功能。

return Observable.throw("Credentials mismatch or not existing")

如果您希望数组项(// this is the TX You don't want $ignoreState = 'TX'; // filter features, remove those which are not of any of the desired event types // and also remove those from $ignoreState $alertFeatures = array_filter($features, function (array $feature) use ($alerts, $ignoreState) { $eventType = $feature['properties']['event']; $isValidEvent = in_array($eventType, $alerts); $geocode = $feature['properties']['geocode']['UGC'][0]; $isValidState = substr($geocode, 0, 2) != $ignoreState; return $isValidState && $isValidEvent; }); )位于结果数组中,则filter函数只是一个应该返回true的函数,如果您想要,则$feature要从结果数组中排除的数组项。

在您的情况下,如果数组项的事件是列入白名单的事件之一(false)并且状态代码($alerts)不是{{},那么您希望数组项位于结果数组中1}}。