PHP извлекает ключ-значение в массиве json и реструктурирует - PullRequest
0 голосов
/ 17 января 2019

Любая идея о том, как реструктурировать JSON ниже:

$jsonArray = [{"Level":"77.2023%","Product":"Milk","Temperature":"4"},
         {"Level":"399.2023%","Product":"Coffee","Temperature":"34"},
         {"Level":"109.2023%","Product":"Chocolate","Temperature":"14"}]

Ожидаемый результат:

 $expected = {"Milk":{"Level":"77.2023%","Temperature":"4"},
         "Coffee":{"Level":"399.2023%","Temperature":"34"},
         "Chocolate":{"Level":"109.2023%","Temperature":"14"}
         }

Я новичок, и я думаю, получить значение продукта в массиве и снова использовать цикл foreach, чтобы найти значение других? .

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Это сделало какой-то трюк

$a = '[{"Level":"77.2023%","Product":"Milk","Temperature":"4"},
         {"Level":"399.2023%","Product":"Coffee","Temperature":"34"},
         {"Level":"109.2023%","Product":"Chocolate","Temperature":"14"}]';

$newAr = array();
foreach(json_decode($a,true) as $key=>$value)
{
    $newAr[$value['Product']] = array(
            'Level' => $value['Level'],
            'Temperature' => $value['Temperature'],
        );
}
0 голосов
/ 17 января 2019

Есть много способов сделать это с помощью Loops в PHP. Другие ответы демонстрируют это точно. Я бы также предложил включить некоторую форму обработки ошибок, проверки / фильтрации / ограничения данных в ваш код, чтобы избежать неожиданных результатов в будущем.

Например, json_decode (), назначенный переменной pre-foreach или прямой в первом аргументе foreach (), просто выдаст предупреждение, если исходный json не является допустимым-json, и просто пропустит foreach, используемый для построить свою конечную цель. Затем, если вы передадите результат (который, возможно, потерпел неудачу) непосредственно вашей следующей логической конструкции, он может создать некоторое ненадежное поведение.

Кроме того, в отношении концепции проверки данных и фильтрации вы можете ограничить foreach () или любой другой механизм зацикливания для проверки с помощью Product_List_Array [Milk, Coffee, Chocolate], используя if (in_array () .. .) поэтому конечный объект / объект цели содержит только ожидаемые продукты, это в случае, если исходный json имеет другие артефакты. Фильтрация значений также может повысить стабильность при ограничении, например, температуры до плавания.

0 голосов
/ 17 января 2019

Вот одна из возможностей:

$jsonArray = '[{"Level":"77.2023%","Product":"Milk","Temperature":"4"},
         {"Level":"399.2023%","Product":"Coffee","Temperature":"34"},
         {"Level":"109.2023%","Product":"Chocolate","Temperature":"14"}]';
$output = array();
foreach (json_decode($jsonArray, true) as $row) {
    $product = $row['Product'];
    $output[$product] = $row;
    unset($output[$product]['Product']);
}
echo json_encode($output);

Выход:

{"Milk":{"Level":"77.2023%","Temperature":"4"},
 "Coffee":{"Level":"399.2023%","Temperature":"34"},
 "Chocolate":{"Level":"109.2023%","Temperature":"14"}
}

Демонстрация на 3v4l.org

...