如何在php中的不同变量中存储数组元素

时间:2017-04-28 06:56:24

标签: php arrays variables

我有一个选择的语言下拉列表,我很想将数组的每个元素放在不同的变量中。为了解你的问题,我将在这里提供一个代码:

<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种,我该如何避免这种情况并回显变量?

7 个答案:

答案 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 variablevalues将是values of variable

Try this code snippet here

<?php

ini_set('display_errors', 1);
$array=array();
foreach($languages as $key => $language)
{
    $array["language".($key+1)]=$language;
}
extract($array);
echo $language1;
echo $language2;