У меня очень простая база данных, список из 8 языков, и значения, которые они могут иметь, - Y или N. Мне нужно вывести флажок для каждого языка, и, если значение равно Y, флажок должен быть установлен, иначе он должен быть пустым. Это код, который я использую для каждого отдельного языка, но я хотел бы знать, есть ли лучший способ получить тот же результат.
if ($language=='N'){
echo "<input type='checkbox' name='" . $rowlang["english"] . "' value='" . $rowlang["english"] . "'> English<br>";
} else {
echo "<input type='checkbox' name='" . $rowlang["english"] . "' value='" . $rowlang["english"] . " checked'> English<br>";}
//What I've tried to do is to build an array of the languages and use a foreach
$languages = array($rowlang["czech"],$rowlang["english"],$rowlang["german"],$rowlang["slovak"],$rowlang["russian"],$rowlang["french"],$rowlang["spanish"],$rowlang["italian"]);
foreach($languages as $language)
if ($language=='N'){
echo "<input type='checkbox' name='" . $language . "' value='" . $language . "'> " . $rowlang . "<br>";
}else{
echo "<input type='checkbox' name='" . $language . "' value='" . $language . "' checked> " . $rowlang . "<br>";
}
который почти работает, проблема в том, что я не могу повторить один язык, потому что с этим кодом я получаю «массив».






Сначала создайте ассоциативный массив и сохраните в нем языки и их значения:
$languages = array('czech' => 'N','english' => 'Y','german' => 'N','slovak' => 'N','russian' => 'N','french' => 'N','spanish' => 'Y','italian' => 'N' );
тогда:
foreach($languages as $key => $value) {
if ($value=='N'){
echo "<input type='checkbox' name='" . $key . "' value='" . $value . "'> " . $key . "<br>";
}
else{
echo "<input type='checkbox' name='" . $key . "' value='" . $value . "' checked> " . $key . "<br>";
}
}
если это массив, вы должны использовать $язык->название_языка или $язык['language_name'] в зависимости от типа вашего массива
Проблема в том, что попытка использовать $rowlang как часть echo является проблемой, поскольку это массив.
Вместо этого вы можете создать массив языков, которые вы хотите вывести, это также дает имя, которое будет отображаться в качестве значения. Поэтому используйте foreach() над этим массивом и проверьте массив $rowlang, чтобы увидеть, установлен ли он. Вместо того, чтобы повторять весь HTML, это просто устанавливает атрибут checked.
// Need to expand this array for all the countries you need
$languages = array("german" => "Germany","english" => "English");
foreach($languages as $language => $label) {
if ($rowlang[$language]=='N'){
$checked = '';
}else{
$checked = ' checked';
}
echo "<input type='checkbox' name='" . $language . "' value='" . $language . "'$checked>" . $label . "<br>";
}
Это выведет что-то вроде
<input type='checkbox' name='german' value='german'>Germany<br>
<input type='checkbox' name='english' value='english' checked>English<br>
Идеально, это то, что я искал. У вас есть ссылка, где я могу узнать больше о части «метки»?