如何合并2个数组(PHP,Form)

时间:2019-01-10 17:30:35

标签: php mysql arrays forms concatenation

我在数据库中有多个地址,每行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>

致谢。

3 个答案:

答案 0 :(得分:3)

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

$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++
        }

答案 1 :(得分:0)

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

在我的代码下方查看用法

$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 . ' ';
}

答案 2 :(得分:0)

每次循环时,您需要将每组到达/离开添加到数组。

$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>";

}