在变量PHP中显示带foreach的数组

时间:2012-10-08 16:59:17

标签: php arrays email foreach

我只是略过了,但我想在这里得到我的第一个问题,因为我没有找到具体和类似的例子/询问。

我在一个网站的“第一页”上有许多不同公司的团体。在每个组中有1到20个左右的复选框输入字段,以便客户在提交下面的表单后可以要求向他们发送不同的信息。在仅运行php脚本的单独页面上,我将表单通过电子邮件发送给主机公司。然后消息显示如下:(并且我更改了内容......)

我想要阅读:

            *Favorite Animals: Dog, Cat, Bird*

但我读完了:

            Favorite Animals: Dog,
            Favorite Animals: Cat,
            Favorite Animals: Bird,

我的代码:

在第一页上,我们在同一个数组中有一个不同复选框的列表,其中包含明显不同的值...如下所示:

<input type="checkbox" name="animals[]" value="Dogs" class="cb">
 Dogs<br>
<input type="checkbox" name="animals[]" value="Cats" class="cb">
 Cats<br>
<input type="checkbox" name="animals[]" value="Birds" class="cb">
 Birds<br>
<input type="checkbox" name="animals[]" value="Dragons" class="cb">
 Dragons<br>

然后将上述代码(通过帖子)提交到单独的php文档。

第二页的相关代码是:

$animals = $_POST['animals'];

...以下

    foreach ($animals as $an) {
$email_message .= "Favorite Animals: ".clean_string($an)." ,\n";
    }

我意识到发生了什么,但我还没有找到一种方法来处理foreach语句,以便显示“Favorite Animal's”一次,然后显示上一页中所选内容的可能数组。

我没有错误,只是以我不想要的方式获取信息。任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:1)

不要使用foreach并自己处理额外的逗号,而是使用implode

$email_message = implode(', ', array_map('clean_string', $animals);

答案 1 :(得分:0)

使用“最喜欢的动物:”初始化字符串$email_message,然后在循环中追加数组的其余部分

$email_message = "Favorite Animals: ";
 foreach ($animals as $an) {
$email_message .= clean_string($an)." , ";
    }

答案 2 :(得分:0)

这里发生的是表单只发布所选内容,而不是未选中的内容。您可能想要的是显示动物的所有可能值及其选择的列表。要做到这一点,我会更改您的提交表单,并让它发布所有值:

<input type="checkbox" name="animals['Dogs']" onclick="this.value='yes'" value="no" class="cb">
 Dogs<br>
<input type="checkbox" name="animals['Cats']" onclick="this.value='yes'" value="no" class="cb">
 Cats<br>
<input type="checkbox" name="animals['Birds']" onclick="this.value='yes'" value="no" class="cb">
 Birds<br>
<input type="checkbox" name="animals['Dragons']" onclick="this.value='yes'" value="no" class="cb">
 Dragons<br>

您的电子邮件打印功能应该更新,以便现在包含数组中的键:

$email_message = "Favorite Animals:";
foreach ($animals as $key=>$val) {
  $email_message .=".clean_string($key). "=" . clean_string($val) . " ,\n";
}

所以正在发生的事情是所有的值都被传递,但是当有人点击它们时,它们会从“否”变为“是”。这是一种解决方法,还有其他方法可以处理它,但它们可能需要更新而不仅仅是表单。

答案 3 :(得分:0)

只需将静态部分带到循环外部即可。应该这样做。

 $email_message .= "Favorite Animals: ";

 foreach ($animals as $an) {
   $email_message .= clean_string($an)." ,";
 }
  $email_message = rtrim ($email_message, ",");

 $email_message .= "\n";

 // Continue appending rest of the email message

答案 4 :(得分:0)

其他答案要好得多,但只是一些思考的问题你也可以通过这样的条件陈述来实现这个目标:

$animals = array('Animal 1', 'Animal 2', 'Animal 3');
$email_message = "";
$firstTime = true;
foreach ($animals as $an) {
    if ($firstTime === true) {
        $email_message .= "Favorite Animals: ".$an." ,\n";
        $firstTime = false;
    } else {
        $email_message .= $an." ,\n";
    }
}

$email_message = substr($email_message, 0, -3);
echo $email_message;