我有一个像这样的foreach:
foreach ($posts as $post) {
$postArray[] = array(
"title" => $post->title,
"date" => date("d.m.Y", $post->created),
// ... etc
);
var_dump($postArray);
}
$postArray
在此循环之外的任何地方都没有被删除,但是每个循环迭代都添加到现有数组,就好像这个变量是全局的,而不是创建一个新变量!
这是PHP设置吗?请记住,我没有真正改变默认WAMP给我的任何设置。有什么想法吗?
答案 0 :(得分:3)
它不是全局变量,而是写入语法的方式,它在第一次迭代后变为全局变量。这是因为您使用array_push
[]
的简写。通常我们将其用作array_push()
你想做的就是这个 -
$postArray = array(
...
);
这样,在每次迭代中,您将获得一个全新的$postArray
对象。
答案 1 :(得分:2)
PHP具有功能级范围,而不是块级范围。变量确实是全局变量,如果此代码不在函数/类方法中,或者它是函数的本地变量,而不是循环
答案 2 :(得分:1)
$myArray[] = $newVariable;
会附加到数组中。
如果你想要一个新数组,只需重新声明,或在每个循环开始时清空数组。
$myArray = array();
$myArray[] = $data;
答案 3 :(得分:-2)
foreach仅适用于数组和对象,当您尝试在具有不同数据类型或未初始化变量的变量上使用它时会发出错误。
这里我们使用foreach本身支持数组。