【发布时间】: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