2010-11-19 3 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이 필요합니다

$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; 
} 
관련 문제