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

半城伤御伤魂 提交于 2019-12-02 04:29:16

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;
} 

Or more concisely:

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

I'd go with something like:

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

I'd also try passing $namesArray by reference, like Viktor mentioned. My code makes completely new array to push each iteration, which makes sure you dpn't overwrite stuff. Also, if you want to add stuff to an array by accessing it via its index you should use this:

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

Try

array_push(&$namesArray,$nameAndCode);

I think array_push requires a reference or pointer.

Is there a reason you aren't using $namesArray[]? Instead of the above:

$namesArray[] = $nameAndCode;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!