Доброго времени суток, форумчане! У меня возникла проблема, у меня есть вот такой JSON файл:
{
"terminals": [
{
"token": "hile_abcd1234",
"name": "Hile Group Authorized Agent",
"scopes": [
"r"
]
},
{
"token": "hile_absd1234",
"name": "Hile Group Authorized Agent 2",
"scopes": [
"w"
]
}
]
}
Мне нужно найти токен hile_absd1234
и вернуть массив в котором он находится. Как это сделать?
$arr = json_decode($string, true);
$res = array_filter($arr['terminals'],
function($x) { return $x['token'] == 'hile_absd1234'; });
demo
да вроде ничего сложного?
$json = '{"terminals":[{"token":"hile_abcd1234","name":"Hile Group Authorized Agent","scopes":["r"]},{"token":"hile_absd1234","name":"Hile Group Authorized Agent 2","scopes":["w"]}]}';
$data = json_decode($json, true);
$result = null;
$needle = "hile_absd1234";
foreach($data['terminals'] as $t){
if($t['token'] === $needle){
$result = $t;
break;
}
}
print_r($result);
как уже описано у @splash58, можно использовать array_filter
, однако тут в результате будет массив, внутри которого - искомый результат. Альтернативой может стать array_reduce
$result = array_reduce($data['terminals'], function($carry, $item) use ($needle){
if($item['token'] === $needle){
$carry = $item;
}
return $carry;
});
print_r($result);
он вернет сразу искомый массив.
недостатком обоих функций массивов в том, что они просмотрят весь массив полностью, в то время как в цикле мы можем сделать break
после нахождения элемента.
Ещё вариант в коллекцию:
$need = 'hile_absd1234';
$result = [];
$array = json_decode($string, true);
foreach ($array as $arr) {
foreach ($arr as $k => $v) {
if ($v['token'] == $need) {
$result[] = $arr[$k];
}
}
}
echo '<pre>', print_r($result, true), '</pre>';
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как записать значение переменной в сессию/куки только 1 раз без перезаписи? Обновляется страница 3 раза и прилетают 3 разных значения в cookie
какой функцией для работы с массивами можно заменить foreach в таком коде