JimmiWillTakeThisUsername Ответов: 2

Как я могу сделать это с PHP петля в петлю acuratly все элементы в массиве


Я получаю три ввода из представленной формы:

1. Количество секций
2. количество элементов в каждом разделе (массиве)
3. Все элементы (массив)

Цикл формы начинается с циклического перебора секций:

for($r = 0; $r < $sectionamount; $r++) {


Затем у него есть внутренняя петля для петли над каждым элементом в разделе:

for( $ret = 0; $ret < $hoevelbinee; $ret++ ) {
	 
   $diwordeid = $myform[$fiv];
	 
   $diou .= "die input is " . $diwordeid . "</br>";
   $fiv++;
 }


Таким образом, полная функция будет:

$tr = 0;
$fiv = 0;

for($r = 0; $r < $hoevelsections; $r++) {
	
   $hoevelbinee = $myformsekis[$tr];
   $ret = 0;

   for( $ret = 0; $ret < $hoevelbinee; $ret++ ) {
	 
      $diwordeid = $myform[$fiv];
	 
      $diou .= "die input is " . $diwordeid . "</br>";
      $fiv++;
   }

   $tr++;

}

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

Array
(
    [0] => Entrance
    [1] => Door & Door frame
    [2] => Kombuis
    [3] => Door & Door frame
)

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

Output:

die input is Entrance
die input is Door & Door frame
die input is Kombuis
die input is Door & Door frame


Но все, что больше двух секций, цикл for пропустит последние два или три входа, например

Array
(
    [0] => Entrance
    [1] => Door & Door frame
    [2] => Kombuis
    [3] => vloer
    [4] => kaste
    [5] => Kamer
    [6] => gang
    [7] => bed
    [8] => mat
)

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

Output:

die input is Entrance
die input is Door & Door frame
die input is Kombuis
die input is vloer
die input is kaste
die input is Kamer
die input is gang


Так почему бы не сделать петли для каждой записи в массиве?

Что я уже пробовал:

$tr = 0;
$fiv = 0;

for($r = 0; $r < $hoevelsections; $r++) {
	
   $hoevelbinee = $myformsekis[$tr];
   $ret = 0;

   for( $ret = 0; $ret < $hoevelbinee; $ret++ ) {
	 
      $diwordeid = $myform[$fiv];
	 
      $diou .= "die input is " . $diwordeid . "</br>";
      $fiv++;
   }

  $tr++;

}

2 Ответов

Рейтинг:
19

Richard MacCutchan

Код, который вы показали, не является точным, поэтому мне пришлось сделать некоторые предположения. Вот такой вывод я получаю:

$tr 0
die input is Entrance

$tr 1
die input is Door & Door frame
die input is Kombuis

$tr 2
die input is vloer
die input is kaste
die input is Kamer


Что является правильным в соответствии с этими значениями массива.

[редактировать]
Читая это снова, я задаюсь вопросом, не упустили ли вы из виду тот факт, что ваш второй массив ошибочен. Первый массив содержит 8 элементов, но записи во втором массиве складываются до 6, так что именно столько элементов он будет печатать. Измените свой второй массив на:
Array
(
    [0] => 1
    [1] => 2
    [2] => 5
)

Но я не могу понять, почему вы сделали что-то простое таким сложным.
[/редактировать]


JimmiWillTakeThisUsername

Спасибо Ричарду Маккатчану!

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

Массив должен быть правильным. Я не создаю их вручную - они создаются с помощью входных данных из формы. Я пересчитал массив, и вы, возможно, на правильном пути. Цифры неверны - а это значит, что я могу получить неверные входные данные для второго массива. В данный момент я расследую это дело. Но массив не поднимается до 6, он поднимается до 11.

Array(    
[0] => 1   -> this is actually two as we start counting at 0 (2)      
[1] => 2   -> this is actually three as we start counting at 0 (3)    
[2] => 5   -> this is actually six as we start counting at 0 (6)                
-> 2+3+6 = 11 )


Желаемый результат должен быть:
вход матрицы-это вход
вход матрицы-это дверь и дверная рама
входной сигнал плашки Kombuis
вход матрицы-vloer
входной сигнал плашки касте
входной сигнал плашки камер
вход матрицы-это банда
входной сигнал плашки кровать
входной сигнал плашки мат

В немного более подробно -
Есть разделы($hoevelsections):
Вход
Kombuis
Камер

Под каждым разделом есть количество элементов($myformsekis):
[0] =>
0(вход)->0(вход)
1(Вход)->1(дверь и дверная рама)

[1] =>
0(Комбуйс)->0(Комбуйс)
1(Kombuis)-&ГТ;1(vloer)
2(Kombuis)-&ГТ;2(касте)

[2] =>
0(камера)->0(камера)
1(Камера->1(банда)
2(Камера)->2(кровать)
3(камера->3(мат)

И последний массив($myform) просто имеет все входные данные

Richard MacCutchan

[0] => 1 -> это на самом деле два, так как мы начинаем считать с 0 (2)
Нет, вы начинаете с нуля и продолжаете только тогда, когда количество циклов меньше 1, поэтому вы отображаете 1 элемент. Аналогично другие значения вызывают отображение 2 и 5 элементов соответственно, а не 3 и 6.
Результат, который я дал вам выше, основан на вашем коде, а не на чем-то, что я придумал.

JimmiWillTakeThisUsername

Спасибо! То, что вы сказали, заставило меня отпустить мои вторые номера массива, испорченные. Так что я собираюсь вернуться и начать заново оттуда.

Спасибо, что потратили время на просмотр моего кода.

JimmiWillTakeThisUsername

Чувак!!!! Теперь он отлично работает!
Большое вам спасибо!!!

Richard MacCutchan

Добро пожаловать.

Рейтинг:
0

alexlrn95

Попробуйте использовать цикл foreach:

foreach(element in arr)
echo element


Вы должны проверить руководство php по этому вопросу, так как я в настоящее время не работаю с PHP, и я не уверен, что синтаксис правильный


JimmiWillTakeThisUsername

Спасибо Алексу за Ваш вклад. Не уверен, что функция Foreach создаст желаемые результаты