Создание словаря в переполнении стека

У меня есть данные в переменной $ appLangs как:

[{"id":"1","site":"7","elemId":"navbar_title","en":"Home","de":"Zuhause","fr":"accueil"},{"id":"2","site":"7","elemId":"home_untilNextTime","en":"Until Next Time","de":"Bis zum n\u00e4chsten Mal","fr":"Jusqu'\u00e0 la prochaine fois"}]

Как мне создать массив, который даст мне результат в массиве как:

[{navbar_title :{
“en” : "Home",
“de” : "Zuhause"}},{home_untilNextTime :{
“en” : "Until Next Time",
“de” : "Bis zum n\u00e4chsten Mal"}}]

Новое в PHP, вот что я попробовал, и это дает мне странный результат:

$appLangs = sql_get_record('g_appLanguages', false, true);
foreach ($appLangs as $value) {
$json[$value["elemId"]] = (object) ['en' => $value["en"], 'de' => $value["de"]];
echo json_encode($json);
}

0

Решение

Вам просто нужно декодировать входные данные и сопоставить их с вашей новой структурой. Нет необходимости приводить к объекту или «in-ittivation-json-encoding».

Например.:

$input = '[{"id":"1","site":"7","elemId":"navbar_title","en":"Home","de":"Zuhause","fr":"accueil"},{"id":"2","site":"7","elemId":"home_untilNextTime","en":"Until Next Time","de":"Bis zum n\u00e4chsten Mal","fr":"Jusqu\'\u00e0 la prochaine fois"}]';
$raw = json_decode($input, true);

$output = array_map(function ($entry) {
return [
'en' => $entry['en'],
'de' => $entry['de']
];
}, array_column($raw, null, 'elemId'));

echo json_encode([$output], JSON_PRETTY_PRINT);

// [
//     {
//         "navbar_title": {
//             "en": "Home",
//             "de": "Zuhause"//         },
//         "home_untilNextTime": {
//             "en": "Until Next Time",
//             "de": "Bis zum n\u00e4chsten Mal"//         }
//     }
// ]

демонстрация: https://ideone.com/f3ZeTj


ЗаметкаЯ не понимаю, почему вы хотите обернуть непосредственно используемый объект в массив.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]