2010-11-19 5 views
1

こんにちは、私はあなたが次のIDでインデックスを返すことができたのだろうかと思いました。JSONからのインデックスを返す

$friends = '{ 
    "data": [ 
     { 
     "name": "Paul", 
     "id": "12000" 
     }, 
     { 
     "name": "Bonnie", 
     "id": "120310" 
     }, 
     { 
     "name": "Melissa", 
     "id": "120944" 
     }, 
     { 
     "name": "Simon", 
     "id": "125930" 
     }, 
     { 
     "name": "Anthony", 
     "id": "120605" 
     }, 
     { 
     "name": "David", 
     "id": "120733" 
    } 
    ] 
}'; 

$obj = json_decode($friends); 

たとえば、IDに基づいて名前を印刷したいと考えています。私はarray_searchを使用していたが、配列の構造が気に入らなかった。私はそれをSQLループ内で使用し、配列から名前文字列を返すためにクエリからIDを渡します。

print $obj->{'data'}[0]->{'name'}; 
//where 0 is returned index based on a defined ID. 

おかげでたくさん

答えて

0

次の閉鎖を利​​用するためにPHP 5.3が必要になりますし、強化三項演算子は、(レコードが見つかった場合は名前を印刷し、それ以外の場合は、プリント「NOレコードが見つかりませんでした。」):

$findById = function($id) use ($friends) { 
    foreach (json_decode($friends)->data as $friend) { 
    if ($friend->id === $id) return $friend->name; 
    } 
    return; 
}; 

echo $findById('125930') ?: 'No record found.'; 

これは、この呼び出し可能関数を渡すことができ、定義されたスコープを覚えていることです。つまり、任意のIDを渡すことができますが、$ friends配列は常にクロージャーで使用できるようになります。

0

json_decodeは、変数をオブジェクトにします。検索を行うには、次のものを使用できます。

// The extra true at the end makes it decode to associative arrays 
$json = json_decode($friends, true); 
findByName($json, 1234); 

function findNameById($obj, $id) { 
    foreach($obj as $o) { 
     if($o['id'] == $id) return $o['name']; 
    } 
    return false; 
} 
関連する問題