Intereting Posts
Как определить частичную вертикальную / горизонтальную линию в изображении? Автоматическая аутентификация пользователя после регистрации SMS и PHP … и Google Voice? Что мне не хватает из моих тестовых данных wp-api wordpress? history.js и перенаправление заголовков PHP: конвертировать любую строку в UTF-8 без знания исходного набора символов или, по крайней мере, попробовать Разделите строку на разные подстроки, но сохраните эти подстроки Как получить все данные с использованием отношения? Разбиение на страницы с использованием MySQL LIMIT, OFFSET GEOIP и получение IP-адреса компьютера? PHP взрывает строку с тегами, используя UTF8 между ними несколько возвращаемых значений из PHP с помощью jQuery AJAX Следует ли использовать htmlspecialchars () для информации о вводе или непосредственно перед выходом? создание пользователей moodle и их программное программирование выбор строки из mysql, если совпадает с идентификатором

Как выполнить поиск в массиве JSON в PHP

У меня есть массив JSON

{ "people":[ { "id": "8080", "content": "foo" }, { "id": "8097", "content": "bar" } ] } 

Как мне искать 8097 и получать контент?

Related of "Как выполнить поиск в массиве JSON в PHP"

Функция json_decode должна помочь вам:

 $str = '{ "people":[ { "id": "8080", "content": "foo" }, { "id": "8097", "content": "bar" } ] }'; $json = json_decode($str); foreach($json->people as $item) { if($item->id == "8097") { echo $item->content; } } 

json_decode() и обрабатывать как любой другой массив или объект StdClass

 $arr = json_decode('{ "people":[ { "id": "8080", "content": "foo" }, { "id": "8097", "content": "bar" } ] }',true); $results = array_filter($arr['people'], function($people) { return $people['id'] == 8097; }); var_dump($results); /* array(1) { [1]=> array(2) { ["id"]=> string(4) "8097" ["content"]=> string(3) "bar" } } */ 

Если у вас довольно небольшое количество объектов «людей», тогда предыдущие ответы будут работать для вас. Учитывая, что ваш пример имеет идентификаторы в диапазоне 8000, я подозреваю, что каждый идентификатор может быть не идеальным. Итак, вот еще один метод, который будет исследовать гораздо меньше людей, прежде чем найти правильный (пока люди находятся в порядке ID):

 //start with JSON stored as a string in $jsonStr variable // pull sorted array from JSON $sortedArray = json_decode($jsonStr, true); $target = 8097; //this can be changed to any other ID you need to find $targetPerson = findContentByIndex($sortedArray, $target, 0, count($sortedArray)); if ($targetPerson == -1) //no match was found echo "No Match Found"; function findContentByIndex($sortedArray, $target, $low, $high) { //this is basically a binary search if ($high < low) return -1; //match not found $mid = $low + (($high-$low) / 2) if ($sortedArray[$mid]['id'] > $target) //search the first half of the remaining objects return findContentByIndex($sortedArray, $target, $low, $mid - 1); else if ($sortedArray[$mid]['id'] < $target) //search the second half of the remaining objects return findContentByIndex($sortedArray, $target, $mid + 1, $high); else //match found! return it! return $sortedArray[$mid]; }