Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
foreach循环中PHP中赋值和数组推送的区别_Php_Foreach_Assign_Array Push - Fatal编程技术网

foreach循环中PHP中赋值和数组推送的区别

foreach循环中PHP中赋值和数组推送的区别,php,foreach,assign,array-push,Php,Foreach,Assign,Array Push,我试图理解数组推送和在foreach循环中为具有等号的数组赋值之间的区别 我的问题是: $data['database'] = array(); if ($sql->num_rows() > 0) { foreach($sql->result_array() as $row) { $data['database'] = $row;

我试图理解数组推送和在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\u credit\u tracker\u assoc')->get();因为我使用的是expressionengine,但实际上任何准备好的语句都是好的

现在,如果我使用comment语句

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;
        }
我只能看到循环内的数组,如果将数组转储到循环外,则只能看到第一行。这很奇怪,因为我的代码中有一个类似的循环,它的作用正好相反,只分配了值:

$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\u push()
相同的结果,您需要通过以下方式将该项指定为数组中的新元素:

$data['database'][] = $row;
这将产生与以下相同的结果:

array_push($data['database'], $row);
您编写
$data['database']
的方式正在被
$row

覆盖,请查看以下注释:“注意:如果使用
array\u push()
向数组中添加一个元素,最好使用
$array[]=
,因为这样就不会产生调用函数的开销。”