получить родительское значение JSON

В php я пытаюсь получить числа (0, 13, 20, 45, 53, 56) из этого файла json:

{
"0": {
"classcat": "a",
},
"13": {
"classcat": "b",
},
"20": {
"classcat": "c",
},
"45": {
"classcat": "d",
},
"53": {
"classcat": "e",
},
}

Я заполняю этот файл в поле выбора с циклом foreach. Мой желаемый результат будет:

<select>
<option value="(classcatvalue)">(classcatvalue + number)</option>
<option value="a">a 0</option>
<option value="b">b 13</option>
<option value="c">c 20</option>
<option value="d">d 45</option>
<option value="e">e 53</option>
</select>

Выглядит просто, но я не могу понять это.
Есть идеи?

-3

Решение

использование json_decode() преобразовать JSON в массив PHP, а затем использовать foreach зацикливаться на этом.

$array = json_decode($json, true);
foreach ($array as $number => $value) {
$classcatvalue = $value['classcat'];
echo "<option value="$classcatvalue">$number $classcatvalue</option>";
}
0

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

Одна из основных проблем заключается в том, что ваш JSON недействителен. У вас много лишних запятых. После исправления вы можете преобразовать его в ассоциативный массив с json_decode():

$options = json_decode(<<<JSON
{
"0" : { "classcat": "a" },
"13": { "classcat": "b" },
"20": { "classcat": "c" },
"45": { "classcat": "d" },
"53": { "classcat": "e" }
}
JSON
, true);

И, возможно, упростить значения, удалив внутренний объект / массив и записав сами значения:

array_walk($options, function(&$v, $k) { $v = $v['classcat']; });

Теперь это просто вопрос использования foreach цикл для вывода ваших вариантов:

<select>
<option value="(classcatvalue)">(classcatvalue + number)</option>
<?php foreach ($options as $n => $cat) : ?>
<option value="<?= $cat ?>"><?= "$cat $n" ?></option>
<?php endforeach; ?>
</select>

Если бы значения не были упрощены, нужно использовать $cat['classcat'] вместо.

0

Используйте array_keys после json_decoded строки.

$values = array_keys(json_decode($json_str, true));

// Now you can output them like:
Echo $values[1]; // 13
-2
По вопросам рекламы [email protected]