簡體   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