繁体   English   中英

如何在while循环内填充数组并在每次迭代中获取新作用域?

[英]How do I fill an array inside a while loop and get new scope each iteration?

问题是我只从表中得到最后一个值。 我认为是因为我在构建数组时将其值引用到同一对象,并且它不断变化。 我知道while循环不会为每次迭代创建新范围,这就是问题所在。

为每次迭代获取新作用域的最佳方法是什么?

码:

    $namesArray= array();
        while ($row=mysql_fetch_array($result))
        {
        $nameAndCode->code = $row['country_code2'];
        $nameAndCode->name = $row['country_name'];           
        array_push($namesArray,$nameAndCode);


        } 
return $namesArray;

您需要在每次迭代中创建一个新对象:

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']
    );
} 

我会选择类似的东西:

$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";

尝试

array_push(&$namesArray,$nameAndCode);

我认为array_push需要引用或指针。

您没有使用$namesArray[]吗? 代替上面的:

$namesArray[] = $nameAndCode;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM