1

我有一个像这样的foreach:

foreach ($posts as $post) {

    $postArray[] = array(
    "title" => $post->title,
    "date" => date("d.m.Y", $post->created),
    // ... etc
  );

  var_dump($postArray);
}

$postArray在这个循环之外的任何地方都没有被删除,但是每个循环迭代都是添加到现有数组中,就好像这个变量是全局的,而不是创建一个新的!

这是 PHP 设置吗?请记住,我并没有真正改变任何默认 WAMP 给我的设置。有任何想法吗?

4

4 回答 4

3

它不是全局变量,而是您的语法编写方式,它在第一次迭代后变为全局变量。这是因为您使用的array_push[]. 通常我们用它作为同义词array_push()

你想做的是这个——

$postArray = array(
  ...
);

这样,在每次迭代中,您都会获得一个全新的$postArray对象。

于 2012-11-18T15:15:53.383 回答
2

PHP 具有函数级范围,而不是块级范围。如果此代码不在函数/类方法中,或者它是函数的局部变量,而不是循环,则该变量确实是全局变量

于 2012-11-18T15:19:00.210 回答
1

$myArray[] = $newVariable;将追加到数组。

如果您想要一个新数组,只需在每个循环开始时重新声明或清空数组。

$myArray = array();
$myArray[] = $data;
于 2012-11-18T15:17:13.160 回答
-2

foreach 仅适用于数组和对象,当您尝试在具有不同数据类型的变量或未初始化的变量上使用它时会发出错误。

这里我们使用本身支持数组的 foreach 。

于 2012-11-18T15:18:55.730 回答