Помощь в разборке массива

246
14 июля 2018, 14:20

Есть такой массив -

{
  "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"

Answer 1

Можно, например, перебрать значения

$value = null;
$result = json_decode($json); // в $json текст из вашего примера
foreach($result->result->LIST as $item)
{
    if($item->ID == 125)
        $value = $item->VALUE; // нужное значение будет в $value
}
Answer 2

Я бы реализовал всё в виде небольшой функции:

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));

Проверки можно убрать или добавить, но пример должен работать.

Answer 3
    $json = ваш "массив";
    $decoded = json_decode($json);
    $list = $decoded->result->LIST;
    $iNeedThis;       
    foreach ($list as $item) {
        if ($item->ID == "125") {
            $iNeedThis = $item;
            break;
        }
    }
Answer 4

Про 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;
READ ALSO
str_replace php

str_replace php

Как сделать замену по шаблону: слово: и 3 цифры

177
Не изменяются данные в БД Mysql

Не изменяются данные в БД Mysql

У меня небольшая проблемкаМне нужно изменить конкретное поле из выборки бд(Mysql)

191
Как получить нужный id из запроса?

Как получить нужный id из запроса?

Сделал я значит поиск, но id выводиться только из таблицы events, а мне нужно еще получать id из таблицы blogИ сделать условие, для передачи ссылки...

180
Авторизация в laravel

Авторизация в laravel

Я создал все представления и маршруты с помощью команды php artisan make:auth Теперь хочу узнать id авторизованного пользователя при помощи Auth::user()->idВ...

211