Как я могу отображать переменное количество элементов с помощью переключателей в HTML? - PullRequest
0 голосов
/ 11 апреля 2020

файл. json: {"items": [{"num": 1, "color": "red"}, {"num": 2, "color": "blue "}]}

Цель: Считать файл. json, используя PHP, удалить объекты из массива и сохранить.

Метод: Я читаю файл и отображаю элементы массива рядом с переключателями. Объекты, соответствующие выбранному переключателю, будут удалены.

Код:

<?php

$myfile = fopen("/home/user/php/".$filename,"r" ) or die("unable to open file");
$myjsonstr = fread($myfile, filesize("/home/user/php/".$filename));
fclose($myfile);

$jsons = json_decode($myjsonstr, true);

?>

<form action="delete.php" method="POST">
    <input type="radio" name="testcase" value="1"> <?php print_r($jsons["testcases"][0]);?>
    <input type="radio" name="testcase" value="2"> <?php print_r($jsons["testcases"][1]);?>
    <input type="submit" name="delete" value="Delete Selected Values" />
</form>

Проблема: Мне нужно сделать свой список динамическим c в длину, потому что поле значения «items» может иметь переменное количество объектов. Но кажется, что количество переключателей в HTML не может быть переменным. Как вы можете видеть из фрагмента кода, нет. переключателей всегда 2. Мне придется изменить код, если в массиве моего JSON было 3 объекта вместо 2.

Возможно ли это? Как?

1 Ответ

0 голосов
/ 11 апреля 2020

Спасибо, prime_mover! Эта дополнительная деталь помогает. Давайте предположим, что часть до json_decode верна, и у вас есть декодированный объект в переменной $ jsons. Давайте для краткости также поместим тестовые случаи в их собственные переменные.

<?php
  $testCases = $jsons["testcases"];   // array of indeterminate length
?>

<form action="delete.php" method="POST">
<?php
  foreach ($testCases as $ix => $caseTxt) {
          $v = $ix+1;
?>
    <input type="checkbox" name="testcase" value="<?=$v;?>" /><?php print_r($caseTxt); echo "<br>"; ?><br>
<?php } ?>
    <input type="submit" name="delete" value="Delete Selected Values" />
</form>

l oop записывает один новый вход для каждой записи в массиве $ testCases. Не говоря уже о том, что это идеальный код или что он делает именно то, что вы хотите, но он обрабатывает список неизвестной длины.

Возможно, вы захотите обработать нулевую длину иначе.

Обратите внимание, что я изменил тип на флажок, потому что ваш текст ниже сказал "Удалить выбранные значения", поэтому я думаю, что вы хотите разрешить выбирать более одного.

...