Есть такой массив -
{
"result":{
"ID":"238",
"ENTITY_ID":"CRM_LEAD",
"FIELD_NAME":"UF_CRM_1512040228",
"USER_TYPE_ID":"enumeration",
"XML_ID":null,
"SORT":"100",
"MULTIPLE":"Y",
"MANDATORY":"N",
"SHOW_FILTER":"E",
"SHOW_IN_LIST":"Y",
"EDIT_IN_LIST":"Y",
"IS_SEARCHABLE":"N",
"SETTINGS":{
"DISPLAY":"CHECKBOX",
"LIST_HEIGHT":1,
"CAPTION_NO_VALUE":""
},
"EDIT_FORM_LABEL":{
"en":"\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442",
"ru":"\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442"
},
"LIST_COLUMN_LABEL":{
"en":"\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442",
"ru":"\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442"
},
"LIST_FILTER_LABEL":{
"en":"\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442",
"ru":"\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442"
},
"ERROR_MESSAGE":{
"en":null,
"ru":null
},
"HELP_MESSAGE":{
"en":null,
"ru":null
},
"LIST":[
{
"ID":"126",
"SORT":"10",
"VALUE":"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e",
"DEF":"N"
},
{
"ID":"123",
"SORT":"20",
"VALUE":"Center",
"DEF":"N"
},
{
"ID":"124",
"SORT":"30",
"VALUE":"City Lake",
"DEF":"N"
},
{
"ID":"125",
"SORT":"40",
"VALUE":"Villaggo",
"DEF":"N"
},
{
"ID":"140",
"SORT":"50",
"VALUE":"\u0413\u043e\u0440\u0435\u043d\u0438\u0447\u0438",
"DEF":"N"
}
]
}
}
в конце есть "LIST":
как мне постучаться и сказать ему: "Эй, массив, у меня есть ID 125, дай-ка мне его значение VALUE"
Можно, например, перебрать значения
$value = null;
$result = json_decode($json); // в $json текст из вашего примера
foreach($result->result->LIST as $item)
{
if($item->ID == 125)
$value = $item->VALUE; // нужное значение будет в $value
}
Я бы реализовал всё в виде небольшой функции:
function findListValue(string $json, int $id) {
$data = json_decode($json, true);
if (!array_key_exists('result', $data)) {
return null;
}
$list = array_values(array_filter($data['result']['LIST'], function ($value) use ($id) {
return $value['ID'] == $id;
}));
if (empty($list)) {
return null;
}
return $list[0]['VALUE'];
}
$json = 'ваш json';
var_dump(findListValue($json, 125));
Проверки можно убрать или добавить, но пример должен работать.
$json = ваш "массив";
$decoded = json_decode($json);
$list = $decoded->result->LIST;
$iNeedThis;
foreach ($list as $item) {
if ($item->ID == "125") {
$iNeedThis = $item;
break;
}
}
Про array_filter повторяться не буду, т.к. и в комментарии писал, и ответ с его использованием тоже дан.
Если же вы уверены, что значения ID не могут повторяться, то вот еще пара вариантов в копилку:
$arr = json_decode($str, 1);
$id = 125; // Требуемый ID
// Вариант с array_reduce()
$item = array_reduce($arr['result']['LIST'], function($carry, $item) use($id){
return $item['ID'] == $id ? $item['VALUE'] : $carry;
}, false);
echo $item; // На выходе - Нужное значение || false
// Вариант с array_column()
// Собираем всё в массив, где ключами будут значения ID, а значениями - VALUE
$data = array_column($arr['result']['LIST'], 'VALUE', 'ID');
echo isset($data[$id]) ? $data[$id] : false;
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня небольшая проблемкаМне нужно изменить конкретное поле из выборки бд(Mysql)
Сделал я значит поиск, но id выводиться только из таблицы events, а мне нужно еще получать id из таблицы blogИ сделать условие, для передачи ссылки...
Я создал все представления и маршруты с помощью команды php artisan make:auth Теперь хочу узнать id авторизованного пользователя при помощи Auth::user()->idВ...