2014-10-19 104 views
0

所以,下面是我想要做的事情的概述,我正在跟踪参加活动的学生列表。该列表将与一些其他有关该事件的信息一起存储在变量中,并且该信息将作为电子邮件发送。PHP没有像预期的那样添加到数组

我试图让用户只需输入学生姓名作为[名字] [姓],每行一个。程序然后将整个textarea列表作为一个字符串,并用新的行字符分割。从这个新创建的列表中,它将按空格字符拆分每个项目,并将列表重新排列为[姓氏] [逗号] [名字],然后为了方便起见按字母顺序升序排列。

我有一个形式,我的HTML代码: <form action="submitted.php" method="post">

提交的资料会去我的剧本“submitted.php”,并使用POST方法。

形式里面我有一个textarea<textarea id="studentList" name="stuList"></textarea>

这是我的PHP代码:

<?php 
    /* get some other variables first */ 
    $msg = ""; // holds the entire email message body 

    /* get the values from the textarea */ 
    $list = $_POST["stuList"]; // use the 'name' attribute on the textarea 

    // split the student list 
     $list = explode("\n", $list); 
     $newList = array(); 

     for($i = 0; $i < count($list); $i++) { 
      $arr = explode(" ", $list[$i]); 

      $fName = $arr[0]; 
      $lName = $arr[1]; 

      $newList[] = $lName . ", " . $fName; 
     } 


     sort($newList); 

     for($i = 0; $i < count($newList); $i++) { 
      $msg .= ($newList[$i] . "\n"); 
     } 

     mail($toAddr, $subject, $msg, $fromAddr); 
?> 

的问题是,在电子邮件中,有更多的“新线”不是应该有。举例来说,如果我输入一些值到文本字段:

John Smith 
Andy Jones 
Sally Sue 

名单按姓氏排序正确,但它似乎是这样的:

Jones, Andy 
Smith 
, John 
Sue 
, Sally 

任何帮助表示赞赏,让我知道如果我需要澄清任何事情。

+1

你在Windows上吗? – Qualcuno 2014-10-19 18:16:35

+0

顺便说一下,不是循环$ newList来创建$ message,而是使用implode($ message,“\ n”) – Qualcuno 2014-10-19 18:17:46

+0

不,我在Mac上,但是我可以尝试内爆并查看它是如何工作的。 – 2014-10-19 18:24:13

回答

0

我无法复制报告的输出OP,但希望帮助简化代码,同时仍能获得理想的结果。

我使用关联数组使代码更简单,并删除了“lastName,firstName”的必要性。当然,您可以更改代码以使用该格式。

$list = $_POST["stuList"]; 
$list = explode("\n", $list); 
$newList = array(); 

foreach ($list as $item) { 
    $nameParts = explode(" ", $item); 
    $newList[$nameParts[1]] = $item; 
} 

ksort($newList); 

$msg = implode(",\n", $newList) 
+0

谢谢。我可以通过将其更改为HTML电子邮件而不是仅使用纯文本来解决问题。 – 2014-10-19 22:48:39