В 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>
Выглядит просто, но я не могу понять это.
Есть идеи?
использование 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>";
}
Одна из основных проблем заключается в том, что ваш 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']
вместо.
Используйте array_keys после json_decoded строки.
$values = array_keys(json_decode($json_str, true));
// Now you can output them like:
Echo $values[1]; // 13