How do I fill an array inside a while loop and get

2020-04-21 01:48发布

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.

What's the best way to get a new scope for each iteration?

Code:

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


        } 
return $namesArray;

3条回答
倾城 Initia
2楼-- · 2020-04-21 02:13

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;
查看更多
贪生不怕死
3楼-- · 2020-04-21 02:26

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";
查看更多
太酷不给撩
4楼-- · 2020-04-21 02:30

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']
    );
} 
查看更多
登录 后发表回答