Я пытаюсь преобразовать строку JSON в <select> html , но мне нужно добиться всего этого на PHP, без JS или jQuery. Ценю любую помощь.
Немного предыстории: результат в формате JSON содержит 2 поля - timestamp и chapter_name. Они используются для перехода видео к месту в секундах через раскрывающийся список и пользователь может выбрать, к какой главе он хочет перейти.
$json_str = ' { "timestamp":"0","chapter_name":"Введение" } , { "timestamp":"20","chapter_name":"Глава 1" } , { "timestamp":"40","chapter_name":"Глава 2" } , { "timestamp":"100","chapter_name":"Глава 3" } ';
$timestamps_arr = json_decode($json_str, true);
$timestamps_output = "
<label for=\"sel_timestamps\">Jump to: </label>
<select id=\"sel_timestamps\" name=\"sel_timestamps\" onchange=\"VidTimeJump()\">";
foreach($timestamps_arr as $timestamp) {
echo '<option value="'.$timestamp['timestamp'].'">'.$timestamp['chapter_name'].'</option>';
}
$timestamps_output .= "</select>";
Ответ 1
Используемый вами JSON некорректен. Чтобы ваш код работал, вы должны добавить свои <option> ( $timestamps_output .= ...) вместо того, чтобы сразу вызывать echo. В итоге вы получите строку $timestamps_output, содержащую <label> и <select> и ваши параметры.
$json_str = '[ { "timestamp":"0","chapter_name":"Introduction" } , { "timestamp":"20","chapter_name":"Chapter 1" } , { "timestamp":"40","chapter_name":"Chapter 2" } , { "timestamp":"100","chapter_name":"Chapter 3" } ]';
$timestamps_arr = json_decode($json_str, true);
$timestamps_output = "
<label for=\"sel_timestamps\">Перейти к: </label>
<select id=\"sel_timestamps\" name=\"sel_timestamps\" onchange=\"VidTimeJump()\">";
foreach($timestamps_arr as $timestamp) {
$timestamps_output .= '<option value="'.$timestamp['timestamp'].'">'.$timestamp['chapter_name'].'</option>';
}
$timestamps_output .= " </select>";
Для вывода, используйте echo $timestamps_output;
<label for="sel_timestamps">Перейти к: </label>
<select id="sel_timestamps" name="sel_timestamps" onchange="VidTimeJump()">
<option value="0">Введение</option>
<option value="20">Глава 1</option>
<option value="40">Глава 2</option>
<option value="100"> Глава 3</option>
</select>
Web