连接数组的所有值

bry*_*mon 4 php arrays concatenation

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

foreach ($header as $i) {
    $i += $i;
}
Run Code Online (Sandbox Code Playgroud)

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

echo $i;
Run Code Online (Sandbox Code Playgroud)

但它总是返回0;

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

Jon*_*nah 12

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

$all = implode('', $header);
Run Code Online (Sandbox Code Playgroud)

http://php.net/implode


jon*_*ohn 6

$i 每次循环迭代时重新分配.

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

$outside_var = 0;

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

echo $outside_var;
Run Code Online (Sandbox Code Playgroud)


mea*_*gar 4

foreach ($header as $i) {
    $i += $i;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码有很多问题。其他答案可以解决这些问题,但只有简单的解释,因此您可能会发现这很有帮助。出于本答案的目的,我将假设$headercontains array('a', 'b', 'c'),并且您的意图是连接这些值。

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

其次,如果您连接,则每次循环.=都会分配给,因此其先前的值将被破坏。$i在循环的第一遍中,您实际上正在执行以下操作:

$i = 'a';
$i .= $i' // aa
Run Code Online (Sandbox Code Playgroud)

在第二遍中,您将执行以下操作:

 $i = 'b';
 $i .= $i; // bb
Run Code Online (Sandbox Code Playgroud)

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

最后,您应该始终在尝试读取变量之前声明变量,所有简写运算符(+=.=*=等)都暗示了这一点。将其包含E_NOTICEerror_reportingphp.ini 中是一个非常好的主意,这样您就会看到此引发的通知。