Фильтровать массив php из JSON с помощью PHP - PullRequest
1 голос
/ 28 февраля 2012

Я извлекаю данные из json и декодирую их с помощью json_decode. Вот код, который я использую:

$jsonurl = "http://ebird.org/ws1.1/data/obs/geo/recent?lng=-76.51&lat=42.46&dist=2&back=1&maxResults=500&locale=en_US&fmt=json&includeProvisional=true";
$json = file_get_contents($jsonurl);
$json_output = json_decode($json);

Это дает результаты результатов в формате:

Array ( [0] => stdClass Object ( [comName] => House Sparrow [howMany] => 2 [lat] => 42.4613266 [lng] => -76.5059255 [locID] => L99381 [locName] => Stewart Park [locationPrivate] => [obsDt] => 2012-02-28 08:26 [obsReviewed] => [obsValid] => 1 [sciName] => Passer domesticus ) [1] => stdClass Object ( [comName] => Common Merganser [howMany] => 7 [lat] => 42.4613266 [lng] => -76.5059255 [locID] => L99381 [locName] => Stewart Park [locationPrivate] => [obsDt] => 2012-02-28 08:26 [obsReviewed] => [obsValid] => 1 [sciName] => Mergus merganser ) [2] => stdClass Object ( [comName] => Herring Gull [howMany] => 100 [lat] => 42.4613266 [lng] => -76.5059255 [locID] => L99381 [locName] => Stewart Park [locationPrivate] => [obsDt] => 2012-02-28 08:26 [obsReviewed] => [obsValid] => 1 [sciName] => Larus argentatus ) )

Теперь я уже несколько дней пытаюсь отфильтровать по comName. Как, например, вы могли бы дать массив только объектов, где comName = "Домовый воробей"?

Я довольно новичок в php, поэтому, если есть лучший способ сделать это, пожалуйста, дайте мне знать. Заранее спасибо!

Ответы [ 2 ]

8 голосов
/ 28 февраля 2012

Использовать функцию array_filter будет проще всего:

$houseSparrow = array_filter($json_output, function($obj)
{
    return $obj->comName == "House Sparrow";
});

Если вы используете старую версию PHP, которая не поддерживает анонимные функции (под PHP 5.3), вам придется использовать следующий код:

function filterHouseSparrow($obj)
{
    return $obj->comName == "House Sparrow";
}
$houseSparrow = array_filter($json_output, 'filterHouseSparrow');
0 голосов
/ 28 февраля 2012
$house_sparrows = array();
foreach ( $json_output as $class ) {
    if ( $class->comName == 'House Sparrow' ) {
        $house_sparrows[] = $class;
    }
}

Однако ответ array_filter Тима Купера выше.

...