foreach循环中PHP中赋值和array_push的区别

Difference between assignment and array_push in PHP in a foreach loop

我试图理解数组推送和在 foreach 循环中使用等号为数组赋值之间的区别。

这是我的问题:

$data['database'] = array();

        if ($sql->num_rows() > 0)
        {
            foreach($sql->result_array() as $row)
            {   
                $data['database'] = $row;
                // array_push($data['database'], $row);
                var_dump($data['database']);
            }
        }

        die();

让我们假设在此之前我进行了一次数据库查询,大致如下: $sql = ee()->db->select('*')->来自('exp_credit_tracker_assoc')->获取();因为我使用的是表达式引擎,但实际上任何准备好的语句都很好。

现在,如果我使用注释语句

array_push($data['database'], $row);

它实际上将我的值推送到我的数组 $data['database'],所以当我将我的数组转储到我的 foreach 循环之外时,我可以看到所有值。

而不是,如果我只分配值:

$data['database'] = $row;

我只能看到循环内的数组,如果我将数组转储到循环外,我只能看到第一行。这很奇怪,因为我的代码中某处有一个类似的循环,它的作用恰恰相反,只分配值:

$sql = ee()->db->select('*')->from('exp_credit_tracker_credit_type')->get();

        $credit_type = array();

        foreach ($sql->result() as $row) {
            $credit_type[$row->credit_name]=$row->credit_name;
        }

我需要使用赋值语法,因为我想即时将一些值赋给其他一些变量,一旦我使用 MySQL 进行查询,我想知道我是否正在做一个错误。

如果您想使用赋值,但在循环外看到与 array_push() 相同的结果,您需要通过以下方式将该项目分配为数组中的新元素:

$data['database'][] = $row;

这应该产生与以下相同的结果:

array_push($data['database'], $row);

您写 $data['database'] 的方式正在被 $row 覆盖。