Часто имена, такие как $ variable1, $ variable2, $ variable3, являются подсказками того, что это должна быть $ variable [0], $ variable [1], $ variable [2]. То, что я имею ниже, теперь только немного удобнее, но вы действительно оцените это, если добавите больше флажков.
$ syndication_checkboxes будет содержать имена и статус проверки / снятия флажка каждого флажка. Первоначальное назначение представляет состояние «по умолчанию», которое может или не может быть переопределено $ _POST.
<?php
$syndication_checkboxes = array(array('name' => 'Yahoo Real Estate', 'checked' => 1),
array('name' => 'Trulia.com', 'checked' => 1),
array('name' => 'Zillow.com', 'checked' => 0));
if isset($_POST['syndication'])
{
$arr = array_fill(0, count($syndication_checkboxes), 0)
foreach($_POST['syndication'] as $k=>$v) //unfortunately in this case, merges on numeric arrays dont overwrite. This could probably be written nicer as an array_walk or map
$arr[$k] = $v;
foreach($arr as $k=>$v)
$syndication_checkboxes[$k]['checked'] = $v;
}
//Everything up to and including <legend>Syndication...
foreach($syndication_checkboxes as $k=>$v)
{
$checkString = $v['checked'] ? "checked='checked'" : '';
echo "<input type='checkbox' name='syndication[$k]' id='syndication-$k' value='1' $checkString />";
echo "<label for='syndication-$k' >".$v['name']."</label>";
}
echo "</form>"
?>
Теперь, если вы хотите добавить новые флажки, все, что вам нужно сделать, это добавить их в назначение $ syndication_checkboxes вверху. Это может происходить даже из базы данных с таблицами для имен и проверок по умолчанию, вместо того, чтобы быть жестко закодированным, что будет хорошо, если оно станет действительно большим или вы захотите изменить его с помощью инструмента администратора или чего-то еще.