foreach循环中PHP中赋值和数组推送的区别
我试图理解数组推送和在foreach循环中为具有等号的数组赋值之间的区别 我的问题是: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;
$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[]=
,因为这样就不会产生调用函数的开销。”