2013-10-13 48 views
0

我的表单中有3个textareas用于收集姓名,年龄和地点,并在提交表单后回显输出。如何做一个在多个数组的PHP foreach循环

问题,我面对:

例如,如果我像进入数据低于

名称:

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 

我怎么能处理来自各textarea的每一行数据,并给予输出?

我的代码: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

的foreach是这里的错误的循环结构。你实际做的只是回应每个可能的条目组合。

使用一个简单的循环,以便每个条目只处理一次,而不是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编写代码时混淆了一些变量......现在好多了吗? – 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] [ '地方']关联。这将是理想的选择。