连接数组的所有值

时间:2011-01-26 19:12:17

标签: php arrays concatenation

我有一个如下所示的循环:

foreach ($header as $i) {
    $i += $i;
}

我正在尝试加载变量($ i),然后在该循​​环之外回显该变量,如下所示:

echo $i;

然而它总是返回0;

是否可以让它返回它在循环中创建的值?

3 个答案:

答案 0 :(得分:12)

您可以使用implode()组合所有值。

$all = implode('', $header);

http://php.net/implode

答案 1 :(得分:6)

每次循环迭代时都会重新分配

$i

在循环外创建一个变量,在循环期间添加它,并在它之外再次回显。

$outside_var = 0;

foreach ($header as $i) {
    $outside_var += $i;
}

echo $outside_var;

答案 2 :(得分:3)

foreach ($header as $i) {
    $i += $i;
}

上面的代码有很多问题。其他答案解决了这些问题,但有了解释,所以你可能会觉得这很有帮助。出于本答案的目的,我将假设$header包含array('a', 'b', 'c'),并且您的意图是连接值。

首先,您使用数字加法运算符+=而不是字符串连接操作.=。这就是$i始终为0的原因:每次尝试使用$header添加时,+=的值都会转换为整数,假设它们不以数字开头,它们将始终转换为到整数0

其次,如果 .=连接,则每次循环都会分配给$i,因此其先前的值将被销毁。在循环的第一次传递中,您实际上是这样做的:

$i = 'a';
$i .= $i' // aa

在第二遍,你这样做:

 $i = 'b';
 $i .= $i; // bb

等等。您需要使用另一个变量来存储数组的每个元素并保存连接的值。否则,当循环存在时,$i总是成为数组的最后一个值,重复。

最后,在尝试读取之前,应始终声明变量,这是所有速记所暗示的(+=.=*=等运营商。在E_NOTICE中将error_reporting包含在php.ini中是一个非常好的主意,这样您就可以看到它引发的通知。