PHP 推入 foreach 后数组为空

PHP array empty after pushing in foreach

我在 foreach 循环中将值推送到数组中,这些值似乎已添加到数组中,因此问题不在于推送条件。但是,当我再次遍历该数组时,它是空的。

谁能给我解释一下,为什么是这个代码

foreach ($allItems as $pair) {
    for ($i = 0; $i < count($keywords); $i++) {
        if ($this->itemInArray($pair["item"], $items2D[$i])) {
            array_push($pair["keywords"], $keywords[$i]->getWord());
        }
    }
    $this->log("Keywords count inside loop: ".count($pair["keywords"]));
}

foreach ($allItems as $pair) {
    $this->log("Keywords count outside loop: ".count($pair["keywords"]));
}

输出这个:

Keywords count inside loop: 3
Keywords count inside loop: 1
Keywords count inside loop: 1
Keywords count inside loop: 1
Keywords count outside loop: 0
Keywords count outside loop: 0
Keywords count outside loop: 0
Keywords count outside loop: 0

我做错了什么以及如何解决?

通过这个你得到数组的副本并修改副本($pair):

foreach ($allItems as $pair) {

您需要修改以获取对 $pair 的引用(注意 &):

foreach ($allItems as &$pair) {

在将项目推入数组时,您不能使用 foreach() 遍历数组。

尝试在 foreach 语句中推送到一个新变量:

array_push($newPair,$keywords[$i]->getWord());