【问题标题】:How to store array elemnts in diffrent variables in php [duplicate]如何在php中将数组元素存储在不同的变量中[重复]
【发布时间】:2017-04-28 06:56:23
【问题描述】:

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

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

【问题讨论】:

  • 这不是一个好习惯。只需使用一个简单的foreach 循环来迭代您的语言数组。如果您将每个语言项转换为单个变量,您将永远不知道变量是否存在。假设您的语言帖子数组包含三个条目。所以你的“$language4”和“$language5”变量永远不会被创建。这使得代码不必要的复杂化。正如我所说,只需使用一个简单的 foreach 循环。

标签: php arrays variables


【解决方案1】:

您可以使用 $$ 来定义变量。检查live demo

请注意,您可以访问 foreach 范围之外的所有变量。

foreach($languages as $k => $v)
{
  $name = 'language' . ($k + 1);
  $$name = $v;
}

print_r($language1);

【讨论】:

    【解决方案2】:

    使用循环。最简单的一个是 foreach。

    <?php
    foreach ($_POST['languages'] as $lang) {
        echo $lang;
    }
    ?>
    

    由于 $_POST['languages'] 是一个数组,您可以循环遍历它的所有元素。不管有多少。 您甚至根本不必检查是否有任何元素,如果没有,则将省略 foreach。

    【讨论】:

      【解决方案3】:

      您应该遍历语言并创建一个变量变量。

      for($i = 0, $cnt = count($languages); $i < $cnt; $i++) {
          $name = sprintf("language%d",$i+1);
          ${$name} = $languages[$i];
      }
      

      它将创建 $language1, $language2,..,但将创建与数组中元素数量一样多的元素(因此如果选中 3,它将仅创建 3)

      【讨论】:

        【解决方案4】:

        试试这个..

          if (isset($_POST['submit'])) {
            if(count($_POST['languages'])>0){
                foreach($_POST['languages'] as $key=>$val){
                    echo $val;
                }
            }
          }
        

        【讨论】:

          【解决方案5】:

          使用上述答案中的建议,我将添加使用“变量变量”的想法,以允许您在 $_POST 数组中命名各个变量。要了解有关此技术的更多信息,请阅读 @ 987654321@ 另外,请注意这种技术存在注入攻击风险,因此您需要有一种方法来检查 $_POST 中的元素是否符合您的预期。

          【讨论】:

            【解决方案6】:

            你可以试试这个,foreach 循环是显示/处理数组的更好方法

            if(!empty($_POST['languages']){
               $languages = $_POST['languages'];
               foreach($languages as $lang){
                echo $lang;
               }
            }
            

            【讨论】:

              【解决方案7】:

              正确的做法是使用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;
              

              【讨论】:

                猜你喜欢
                • 2020-04-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-10-16
                • 2019-10-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多