如果下面的代码有效,我试过了,它确实:
// Lets create and fill a new array
$variable[] = 'value 1';
$variable[] = 'value 2';
$variable[] = 'value 3';
// Implode it, and save it to a a string
$variable = 'values: ' . implode(', ', $variable);
当它还是一个数组时,为什么它能够将字符串存储在$ variable中?
我认为这是发生的事情: 它在内存中创建新值(因此它是新的数据类型),然后将其保存到$ variable,并且必须将其转换为字符串。< / p>
我是对的吗?错误?有人可以解释在幕后发生的事情&#39;这里吗?
答案 0 :(得分:2)
PHP是一种松散类型的语言,因此它并不关心变量的类型。当您使用[]
语法推送新元素时,$variable
会自动成为一个数组。在前三个语句之后,$variable
将是一个包含三个值的一维数组,即value 1
,value 2
和value 3
。
然后,在下一个语句中,您将内爆结果存储在字符串中。我猜你因为变量名相同而感到困惑。在此,重要的是要注意implode(', ', $variable)
是评估第一的内容。结果是一个字符串,然后与字符串values:
连接,然后存储回$variable
(覆盖之前的数组)。
以下是发生的事情:
// $variable isn't defined at this point (yet)
$variable[] = 'value 1';
$variable[] = 'value 2';
$variable[] = 'value 3';
/*
print_r($variable);
Array
(
[0] => value 1
[1] => value 2
[2] => value 3
)
*/
$imploded = implode(', ', $variable);
/*
var_dump($imploded);
string(25) "value 1, value 2, value 3"
*/
$variable = 'values: ' . $imploded;
/*
var_dump($variable);
string(33) "values: value 1, value 2, value 3"
*/