如何在while循环中填充数组并在每次迭代时获取新范围?

Ori*_*ice 1 php arrays loops while-loop

问题是我只得到表中的最后一个值.我认为它是因为我在构建数组时将其值引用到同一个对象,并且它不断变化.我知道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;
Run Code Online (Sandbox Code Playgroud)

nic*_*ckb 11

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

while ($row=mysql_fetch_array($result))
{
    $nameAndCode = new stdClass;
    $nameAndCode->code = $row['country_code2'];
    $nameAndCode->name = $row['country_name'];           
    $namesArray[] = $nameAndCode;
} 
Run Code Online (Sandbox Code Playgroud)

否则,您反复引用同一个对象,只是覆盖其值.

如果不需要对象,也可以使用数组执行此操作:

while ($row=mysql_fetch_array($result))
{
    $nameAndCode = array();
    $nameAndCode['code'] = $row['country_code2'];
    $nameAndCode['name'] = $row['country_name'];           
    $namesArray[] = $nameAndCode;
} 
Run Code Online (Sandbox Code Playgroud)

或者更简洁:

while ($row=mysql_fetch_array($result))
{
    $namesArray[] = array( 
        'code' => $row['country_code2'],
        'name' => $row['country_name']
    );
} 
Run Code Online (Sandbox Code Playgroud)

  • 什么是阵列推送的差异? (2认同)