我有一个选择的语言下拉列表,我很想将数组的每个元素放在不同的变量中。为了解你的问题,我将在这里提供一个代码:
<html dir="ltl">
<?php
header('Content-Type: text/html; charset=utf-8');
$db=mysqli_connect("localhost","root","","travelersdb");
mysqli_query($db,"SET NAMES 'utf8'");
?>
<head>
<link href="Styles/StyleEx.css" rel="stylesheet" type="text/css"/>
</head>
<script type="text/javascript">
var expanded = false;
function showCheckboxes() {
var checkboxes = document.getElementById("checkboxes");
if (!expanded) {
checkboxes.style.display = "block";
expanded = true;
} else {
checkboxes.style.display = "none";
expanded = false;
}
}
</script>
<body>
<tr>
<td>Languages</td>
<td dir="rtl">
<form method="post" action="exxx.php">
<div class="multiselect" dir="rtl">
<div class="selectBox" onclick="showCheckboxes()" dir="rtl">
<select>
<option>Choose language:</option>
</select>
<div class="overSelect" dir="rtl"></div>
</div>
<div id="checkboxes">
<label for="one">
<input type="checkbox" id="one" name="languages[]" value="English">English</label>
<label for="two">
<input type="checkbox" id="two" name="languages[]" value="German" >German</label>
<label for="three">
<input type="checkbox" id="three" name="languages[]" value="French">French</label>
<label for="four">
<input type="checkbox" id="four" name="languages[]" value="Spanish">Spanish</label>
<label for="five">
<input type="checkbox" id="five" name="languages[]" value="Italien">Italien</label>
</div>
</div>
<input type="submit" name="submit">
</form>
</td>
</tr>
<?php
if (isset($_POST['submit'])) {
$languages = $_POST['languages'];
$language1 = $languages[0];
$language2 = $languages[1];
$language3 = $languages[2];
$language4 = $languages[3];
$language5 = $languages[4];
echo $language1;
echo $language2;
echo $language3;
echo $language4;
echo $language5;
}
?>
</body>
</html>
如果我正在检查所有复选框,则没有问题,但如果我检查的时间少于5,我会收到此消息:
Notice: Undefined offset:
这是数组大小的原因。如果检查的语言少于5种,我该如何避免这种情况并回显变量?
答案 0 :(得分:2)
您可以使用$$来定义变量。检查 live demo
请注意,您可以访问foreach范围之外的所有变量。
foreach($languages as $k => $v)
{
$name = 'language' . ($k + 1);
$$name = $v;
}
print_r($language1);
答案 1 :(得分:1)
使用循环。最简单的就是预告。
<?php
foreach ($_POST['languages'] as $lang) {
echo $lang;
}
?>
因为$ _POST [&#39; languages&#39;]是一个数组,你可以循环遍历它的所有元素。不管有多少人。 你甚至不必检查是否有任何元素,如果没有,foreach将被省略。
答案 2 :(得分:0)
你可以试试这个,foreach循环是显示/处理数组的更好方法
void allocate2DArr(char** arr, int rows, int cols)
{
arr = new char *[rows];
for (auto i = 0; i < rows; ++i)
{
arr[i] = new char[cols];
}
}
答案 3 :(得分:0)
您应该遍历语言并创建变量变量。
for($i = 0, $cnt = count($languages); $i < $cnt; $i++) {
$name = sprintf("language%d",$i+1);
${$name} = $languages[$i];
}
它将创建$ language1,$ language2,..,但会创建与数组中元素数量一样多的数量(因此如果选中3,它将只创建3个)
答案 4 :(得分:0)
试试这个..
if (isset($_POST['submit'])) {
if(count($_POST['languages'])>0){
foreach($_POST['languages'] as $key=>$val){
echo $val;
}
}
}
答案 5 :(得分:0)
使用上面答案中的建议,我添加了使用&#34;变量变量&#34;的想法。允许您在$ _POST数组中命名各个变量。要了解有关此技术的更多信息,请阅读the PHP documentation另外,请注意此技术存在注入攻击风险,因此你需要有一种方法来检查$ _POST中的元素是你期望的。
答案 6 :(得分:0)
正确的方法是使用extract
函数。首先,您需要存储在数组中,keys
将是name of variable
而values
将是values of variable
。
<?php
ini_set('display_errors', 1);
$array=array();
foreach($languages as $key => $language)
{
$array["language".($key+1)]=$language;
}
extract($array);
echo $language1;
echo $language2;