【问题标题】:Difference between assignment and array_push in PHP in a foreach loopforeach循环中PHP中的赋值和array_push之间的区别
【发布时间】:2018-10-22 02:00:20
【问题描述】:

我试图了解数组推送和在 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('*')->from('exp_credit_tracker_assoc')->get( );因为我使用的是表达式引擎,但实际上任何准备好的语句都是好的。

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

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 documentation中的这个注释:"注意:如果你使用array_push()向数组中添加一个元素,最好使用$array[] =,因为这样有没有调用函数的开销。”

标签: php foreach assign array-push


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 2012-12-23
    • 2017-01-05
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    相关资源
    最近更新 更多