问题是我只得到表中的最后一个值。我认为它是因为我在构建数组时将其值引用到同一个对象,并且它不断变化。我知道while循环不会为每次迭代创建一个新的范围, IS 问题。
为每次迭代获取新范围的最佳方法是什么?
代码:
$namesArray= array();
while ($row=mysql_fetch_array($result))
{
$nameAndCode->code = $row['country_code2'];
$nameAndCode->name = $row['country_name'];
array_push($namesArray,$nameAndCode);
}
return $namesArray;
答案 0 :(得分:11)
您需要在每次迭代时创建一个新对象:
while ($row=mysql_fetch_array($result))
{
$nameAndCode = new stdClass;
$nameAndCode->code = $row['country_code2'];
$nameAndCode->name = $row['country_name'];
$namesArray[] = $nameAndCode;
}
否则你反复引用同一个对象,只是覆盖它的值。
如果您不需要对象,也可以使用数组执行此操作:
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']
);
}
答案 1 :(得分:1)
我会选择类似的东西:
$namesArray=array();
while($row=mysql_fetch_array($result)){
$nameAndCode=array("code"=>$row["country_code2"],
"name" => $row["country_name"]);
array_push(&$namesArray,$nameAndCode);
};
我也尝试通过引用传递$namesArray
,就像Viktor提到的那样。
我的代码创建了全新的数组来推动每次迭代,这确保你不会覆盖东西。此外,如果您想通过索引访问数组来添加数组,您应该使用:
// This is the right way
$someArray["foo"]="bar";
$someArray["baz"]="quux";
// This is wrong, it's only for OOP
$someArray->foo="bar";
$someArray->baz="quux";
答案 2 :(得分:0)
尝试
array_push(&$namesArray,$nameAndCode);
我认为array_push
需要引用或指针。
您有没有使用$namesArray[]
的原因?而不是上述:
$namesArray[] = $nameAndCode;