How do I fill an array inside a while loop and get new scope each iteration?(如何在 while 循环中填充数组并在每次迭代中获得新范围?)
问题描述
问题是我只得到来自表的最后一个值.我认为这是因为我在将数组的值引用到同一个对象的同时构建数组,并且它一直在变化.我知道 while 循环不会为每次迭代创建一个新的范围,是问题.
The problem is that I get only the last value comming from the Table. I think its because I am building the array while referencing its values to the same object, and it keeps changing. I know while loop doesnt create a new scope for each iteration which IS the problem.
为每次迭代获得新范围的最佳方法是什么?
代码:
$namesArray= array();
while ($row=mysql_fetch_array($result))
{
$nameAndCode->code = $row['country_code2'];
$nameAndCode->name = $row['country_name'];
array_push($namesArray,$nameAndCode);
}
return $namesArray;
推荐答案
您需要在每次迭代时创建一个新对象:
You need to create a new object on each iteration:
while ($row=mysql_fetch_array($result))
{
$nameAndCode = new stdClass;
$nameAndCode->code = $row['country_code2'];
$nameAndCode->name = $row['country_name'];
$namesArray[] = $nameAndCode;
}
否则,您将一遍又一遍地引用同一个对象,而只会覆盖其值.
Otherwise you're referencing the same object over and over, and just overwriting its values.
如果你不需要对象,你也可以用数组来做到这一点:
You also can do this with arrays if you don't require objects:
while ($row=mysql_fetch_array($result))
{
$nameAndCode = array();
$nameAndCode['code'] = $row['country_code2'];
$nameAndCode['name'] = $row['country_name'];
$namesArray[] = $nameAndCode;
}
或者更简洁:
while ($row=mysql_fetch_array($result))
{
$namesArray[] = array(
'code' => $row['country_code2'],
'name' => $row['country_name']
);
}
这篇关于如何在 while 循环中填充数组并在每次迭代中获得新范围?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 while 循环中填充数组并在每次迭代中获得新范围?
基础教程推荐
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- 使用 PDO 转义列名 2021-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- PHP 守护进程/worker 环境 2022-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- HTTP 与 FTP 上传 2021-01-01