2013-10-13 5 views
0

В моей форме есть 3 текстовых поля для сбора имени, возраста и места и повторения вывода после отправки формы.Как сделать цикл foreach в php с несколькими массивами

Проблема я столкнулся:

Например, если я ввода данных, как показано ниже

Имя:

George 
Tom 

Возраст:

30 
40 

Место:

SA 
IN 

Я ожидаю выход как:

My name is George, age 30, from SA 
My name is Tom, age 40, from IN 

Но это дает мне выход:

My name is George, age 30, from SA 
My name is George, age 30, from IN 
My name is George, age 40, from SA 
My name is George, age 40, from IN 
My name is Tom, age 30, from SA 
My name is Tom, age 30, from IN 
My name is Tom, age 40, from SA 
My name is Tom, age 40, from IN 

Как я могу обрабатывать каждый данные строки из каждого текстового поля и дать выход?

Мой код: PHP FIDDLE

<form id="main" name="main" action="#text" method="post" > 
<div class="input">Name<span><textarea class="textarea" id="main-name" name="main-name" type="text"></textarea></span> </div> 
<div class="input">Age<span><textarea class="textarea" id="main-age" name="main-age" type="text"></textarea></span> </div> 
<div class="input">Place<span><textarea class="textarea" id="main-place" name="main-place" type="text"></textarea></span> </div> 


<div class="submit-clear"> 
      <input id="generate" type="submit" name="script" value="create my symcli script" /> 
      <input onClick="clear_all();" id="clear" type="submit" name="clear" value="clear" /> 
</div> 
</form> 



<div id="output-main"> 
<form id="main2" name="main2" action="#text" method="post"> 
<textarea onclick="this.select()" name="output_textarea" id="output_textarea" cols="100" rows="25" readonly value=" "> 

<?php 
$names1 = $_POST['main-name']; 
$ages1 = $_POST['main-age']; 
$places1 = $_POST['main-place']; 

$names = explode("\n", $names1); 
$ages = explode("\n", $ages1); 
$places = explode("\n", $places1); 

       foreach ($names as $key => $name) { 
       foreach ($ages as $key => $age) { 
       foreach ($places as $key => $place) { 
       $name = trim($name); 
       $age = trim($age); 
       $place = trim($place); 


       echo "My name is $name, age $age, from $place".PHP_EOL; 

       }}} 


?> 

</textarea> 

</form> 

</div> 

ответ

1

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

Используйте простой цикл, чтобы каждая запись обрабатывалась только один раз, а не 2^(записи - 1) раз (=> всякая возможная комбинация).

$names = explode("\n", $_POST['main-name']); 
$ages = explode("\n", $_POST['main-age']); 
$places = explode("\n", $_POST['main-place']); 

$entries = min(count($names), count($ages), count($places)) 

for ($i = 0; $i < $entries; $i++) { 
    $name = trim($names[$i]); 
    $age = trim($ages[$i]); 
    $place = trim($places[$i]); 

    echo "My name is $name, age $age, from $place".PHP_EOL; 
} 
+0

@acr Confused некоторые переменные при написании кода ... это лучше? – bwoebi

+0

No..output: 'Меня зовут G, возраст 3, от S' – acr

+0

@acr обновлен снова ... Мне нужно поспать ... – bwoebi

0

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

foreach ($names as $key => $name) { 
      $name = trim($name); 
      $age = trim($ages[$key]); 
      $place = trim($places[$key]); 


      echo "My name is $name, age $age, from $place".PHP_EOL; 

      } 

В противном случае вам нужно связать массив как этот массив [0] [ 'имя'], массив [0] [ 'возраст'], массив [0] [ 'место']. Это был бы идеальный вариант.

Смежные вопросы