【问题标题】:How to merge 2 arrays (PHP, Form)如何合并 2 个数组(PHP、Form)
【发布时间】:2019-06-05 15:18:09
【问题描述】:

我在数据库中有多个地址,每行 1 个出发 1 个到达。

我想将这些添加到“表单/选择”中

我可以显示所有这些:

echo $arraydep[0].$arrayarr[0];

但是

$adresses = array($arraydep[0], $arrayarr[0]);

$adresses = array_merge($arraydep[0], $arrayarr[0]);

$adresses[] = array($arraydep[0], $arrayarr[0]);

在我的表单中不显示全部,只有出发和到达只有 1 行

如果你能帮助我,那就太好了:)

这是我的完整代码:

<?php
include "./cfg/db.php";

$sql = 'SELECT * FROM commandes WHERE phone="555-1234"';
$list = mysqli_query($base, $sql) or die("Erreur SQL !" . $sql . "<br />" . mysqli_error());
mysqli_query($base, $sql) or die("Erreur SQL !" . $sql . "<br />" . mysqli_error());

while ($data = mysqli_fetch_array($list))
    {
    $arraydep = array(
        $data[depadresse]
    );
    $arrayarr = array(
        $data[arradresse]
    );
    echo $arraydep[0] . $arrayarr[0]; // echo all adresses from database for this phone number (for testing)
    $adresses = array(
        $arraydep[0],
        $arrayarr[0]
    );
    }

?>
    <form action="test2.php" method="post">
    <select name="test2">
        <?php

foreach($adresses as $adresse)
    {
?>
        <option value="<?php
    echo $adresses . "<br />"; ?>">
        <?php
    echo $adresse . "<br />"; // only echo 1 departure and 1 arrival for 1 row in the drowdown menu
    }

?>
        </option>
    </select>
    <input type="submit" value="Valider" />
</form>

问候。

【问题讨论】:

  • 使用引号引用您的数组元素,例如$data['depadresse']
  • mysqli_error() 此处需要数据库连接。

标签: php mysql arrays forms concatenation


【解决方案1】:

您只是在数组中插入第一行。试试这个。

$i = 0;
    while ($data = mysqli_fetch_array($list))
        {
        $arraydep = array(
            $data[depadresse]
        );
        $arrayarr = array(
            $data[arradresse]
        );
        echo $arraydep[$i] . $arrayarr[$i]; // echo all adresses from database for this phone number (for testing)
        $adresses = array(
            $arraydep[$i],
            $arrayarr[$i]
        );
        $i++
        }

【讨论】:

    【解决方案2】:

    在外部循环中定义您的数组,否则在下一条语句中不起作用。

    看看我的代码下面的用法

    $arraydep = array();
    $arrayarr = array();
    $adresses = array();
    while ($data = mysqli_fetch_array($list))
    {
        $arraydep[] =  $data['depadresse'];
        $arrayarr[] =  $data['arradresse'];
        $adresses[] = array( $arraydep[0], $arrayarr[0]);
    }
    
    var_dump($adresses);
    
    echo $adresses[0][0] . ' ' . $adresses[0][1];
    
    echo $adresses[1];
    
    foreach ($oneOfDep as $arraydep){
        echo $oneOfDep . ' ';
    }
    

    【讨论】:

      【解决方案3】:

      您需要在每次循环中将每组到达/离开附加到数组中。

      $adresses = array();
      while ($data = mysqli_fetch_array($list,MYSQLI_ASSOC))
      {
          $adresses[] = array(
              'dep' => $data['depadresse'],
              'arr' => $data['arradresse']
          );
      }
      

      如果您使用 MYSQLI_ASSOC 检索结果,您将获得由字段名称键入的结果。我不知道你的字段叫什么,但是在访问 $data 时它们需要放在引号内。

      在使用数组之前初始化数组也是一种很好的做法。

      您还应该避免使用 SELECT *,而是始终列出您有兴趣使用的字段。这告诉其他开发者你的意图。

      您还应该考虑使用 mysqli_fetch_all($list, MYSQLI_ASSOC),然后就不需要使用上述循环了。

      要输出结果,只需使用以下内容。虽然我不确定你想如何输出结果:

      foreach($adresses as $adresse) 
      {
          echo "<option value='{$adresse['dep']}'>{$adresse['dep']}</option>";
          echo "<option value='{$adresse['arr']}'>{$adresse['arr']}</option>";
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-07
        • 2014-03-05
        • 2013-03-08
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        • 2016-11-17
        相关资源
        最近更新 更多