Я передаю массивы в $ _Post, и на следующей странице я хотел бы назначить значения каждого индекса массива _Post, чтобы затем я мог вставить их в таблицу в своей базе данных.

Вот что у меня получается, когда я печатаю $ _Post

Array
(

[id_client] => Array
        (
        [0] => 1
        [1] => 1
        [2] => 1
    )

[id_participant] => Array
    (
        [0] => 44
        [1] => 48
        [2] => 50
    )

[session] => Array
    (
         [0] => 1
         [1] => 2
        [2] => 3
    )
)

Поэтому я хотел бы иметь возможность назначать их переменным в каждом цикле:

$client = id_client[0]
$participant = id_participant[0]
$session = session[0]

Так что я мог бы вставить их в свою базу данных и перейти к индексам 1, 2, 3 ...

php
-1
Mobidoy 13 Мар 2018 в 01:37

2 ответа

Лучший ответ

Предполагая, что у вас есть соответствующие наборы данных в каждом из дочерних массивов, просто выполните итерацию одного из них и используйте ключ для доступа к другим.

foreach ($_POST['id_client'] as $key => $client) {
    $participant = $_POST['id_participant'][$key];
    $session = $_POST['id_session'][$key];
}
2
Don't Panic 12 Мар 2018 в 22:44

Что произойдет, если один из массивов окажется длиннее? Это то, что я спросил себя, другой ответ вполне приемлем, если они всегда будут одной длины. Но я подумал, что придумаю тот, который объясняет это.

К тому же это дало мне повод использовать переменную переменную $$ и объединение ?? null ...

Если возможно, что они могут быть разной длины, вы можете сделать что-то вроде этого:

$array = [
    'id_client' => [1,1,1],
    'id_participant' => [44,48,50],
    'session' =>[1,2,3,4] //< added a fourth item
 ];

//count the number of nested items
$a = array_map(function($item){
    return count($item);
}, $array);

//get the max number of nested items
$max = max($a);

//iterate up to the $max number of times
for($i=0; $i<$max; $i++){
    foreach($array as $key => $value){
        $$key =   $value[$i] ?? false; //$$ is a variable variable, ?? is PHP7+ only
    }
    //these exist because of $$key, its magic
    echo $id_client ."\n";
    echo $id_participant ."\n";
    echo $session ."\n";
    echo "-----------------\n";
}

Выходы:

1
44
1
-----------------
1
48
2
-----------------
1
50
3
-----------------
false
false
4
-----------------

Вы можете попробовать его здесь

1
ArtisticPhoenix 12 Мар 2018 в 23:06