2010-11-19 2 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 и передаю идентификатор из запроса, чтобы вернуть строку имени из массива.

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.'; 

Приятная вещь в том, что вы можете передать этот вызов, и он будет помнить область, с которой он был определен. Это означает, что вы можете передать любой идентификатор, но массив $ 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; 
} 
Смежные вопросы