2012-02-28 8 views
1

jsonからデータを取り出し、json_decodeでデコードしています。ここで私が使用しているコードは次のとおりです。PHPを使用してJSONからphp配列をフィルタリングする

$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 = "House Sparrow"のオブジェクトだけの配列を与えることができますか?

私はかなり新しいPHPですので、これを行うには良い方法があれば教えてください。前もって感謝します!

答えて

7

array_filter機能を使用すると、最も簡単になります:

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

あなたは(PHP 5.3の下で)匿名の機能をサポートしていませんPHPの古いバージョンを実行している場合は、次のコードを使用する必要があります:

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

このコードでは、最初の行で予期しないT_FUNCTIONが発生しています。 – Patrick

+0

@Patrick:更新された回答を参照してください。 –

+0

ああ、ありがとうTim!これはそれでした。私は、5.2から5.3が大きな違いを生み出すことさえ知りませんでした。 – Patrick

0
$house_sparrows = array(); 
foreach ($json_output as $class) { 
    if ($class->comName == 'House Sparrow') { 
     $house_sparrows[] = $class; 
    } 
} 

ティム・クーパーのarray_filterの答えは、しかし、優れています。

+0

これは私に空白の出力を与えています。何も壊れていませんが、ページやソースには何も表示されません。 – Patrick

+0

これはコード例です。実際に '$ house_sparrows'変数を必要なものに接続する必要があります。 – JohnD

+0

申し訳ございません、配列を忘れてしまいました。この回答も同様に機能しました。 JohnDを助けてくれてありがとう。 – Patrick

関連する問題