对foreach的反应奇怪

时间:2013-09-27 23:40:00

标签: php foreach concatenation

我试图将值连接成一个字符串,后来附加到一个隐藏的输入。

这是一个forach循环:

<?php
    $langid     = array();
    $transLang      = '';
    foreach($translator['langs'] as $lang) {

        $curlang    = $lang->term_id;
        $langid[]   = $curlang;
        $transLang  .= '('.$curlang.'), ';

        // for testing
        echo $transLang."<br />";
    }
?>
<input type="hidden" name="selectedLang" value="<?php echo $transLang; ?>" />

langid []数组正确抓取所有内容 但$ transLang回显到输入只显示第一个值,即:(3),

当我使用这一行时:

echo $transLang."<br />";

我为测试而添加了回音:

(3),
(3), (10),
(3), (10), (12),
(3), (10), (12), (27),
(3), (10), (12), (27), (19),
(3), (10), (12), (27), (19), (20),

最后一个是foreach完成运行后的完整字符串,但输入字段值始终只是第一次运行意味着(3),

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

我试图进行虚拟测试。这是我的代码

<?php

    $a = "";
    $loop = array("1","2","3","4","5","6","7","8","9");
    foreach($loop as $i){
        $a .= "($i),";
    }


?>
<input type="hidden" name="selectedLang" value="<?php echo $a; ?>" />

我得到以下输出

<input type="hidden" name="selectedLang" value="(1),(2),(3),(4),(5),(6),(7),(8),(9),">

或者你可以使用额外的array来存储这些stringsecho最后index

所以你的代码将改为这个

<?php
    $langid     = array();
    $strings    = array();
    $transLang      = '';
    foreach($translator['langs'] as $lang) {

        $curlang    = $lang->term_id;
        $langid[]   = $curlang;
        $transLang  .= '('.$curlang.'), ';
        $strings[] = $transLang;
        // for testing
        //echo $transLang."<br />";
    }
?>
<input type="hidden" name="selectedLang" value="<?php echo end($strings); ?>" />

我测试了我的虚拟值的两种方法,它对我来说很好。 首先尝试使用第二种方法

答案 1 :(得分:1)

你可以使用数组内爆: http://php.net/manual/en/function.implode.php