Как объединить 2 массива (PHP, Форма) - PullRequest
0 голосов
/ 10 января 2019

У меня есть несколько адресов в базе данных, для каждой строки 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 голосов
/ 11 января 2019

определяет ваш массив во внешнем цикле, иначе это не сработает в следующем операторе.

посмотрите на использование моего кода ниже

$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 . ' ';
}
0 голосов
/ 11 января 2019

Вы должны добавлять каждый набор прибытия / отправления в массив каждый раз вокруг цикла.

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

}
0 голосов
/ 10 января 2019

Вы вставляете только первую строку в массиве. Попробуйте это.

$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++
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...