Как вернуть отфильтрованную информацию в цикле foreach - PullRequest
0 голосов
/ 05 мая 2020

Я хочу фильтровать информацию внутри foreach и возвращать в качестве результата только некоторые из них.

Это код:

    $keywords = "";
    $avgmonthly = "";
    $compet ="";
    foreach ($response->getResults() as $result) {
        $avgmonthly = $result->getKeywordIdeaMetrics()->getAvgMonthlySearches()->getValue();
        $compet = $result->getKeywordIdeaMetrics()->getCompetition();
        $log = $this->getLogger();
        $log->err($response->serializeToJsonString());

        if ($avgmonthlysearch > 10 && $competition== 4) {
            $keywords .= $result->getText()->getValue() . ",";
        }
    }
        return $keywords;

в моем журнале я вижу следующие результаты:

{"results":[{"text":"world","keywordIdeaMetrics": 
{"avgMonthlySearches":"140","competition":"HIGH"}}, 
{"text":"today ","keywordIdeaMetrics":{"avgMonthlySearches":"10","competition":"HIGH"{"text":"office","keywordIdeaMetrics":{"avgMonthlySearches":"5","competition":"LOW"}}

при попытке вызвать эту функцию я получаю эту ошибку: Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Call to a member function getAvgMonthlySearches() on null

1 Ответ

1 голос
/ 05 мая 2020

Если ваша цель состоит только в том, чтобы избежать этого случая, вы можете добавить условие if (поскольку $ result-> getKeywordIdeaMetrics () может иметь значение null, оно не будет go внутри этого условия if)

foreach ($response->getResults() as $result) {
    if ($result->getKeywordIdeaMetrics()) {
        $avgmonthly = $result->getKeywordIdeaMetrics()->getAvgMonthlySearches()->getValue();
        $compet = $result->getKeywordIdeaMetrics()->getCompetition();
    }

    $log = $this->getLogger();
    $log->err($response->serializeToJsonString());

    if ($avgmonthlysearch > 10 && $competition== 4) {
       $keywords .= $result->getText()->getValue() . ",";
    }
}
...