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
覆盖。
我试图理解数组推送和在 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
覆盖。