1

問題は、テーブルから来る最後の値だけを取得することです。同じオブジェクトの値を参照しながら配列を作成していて、変化し続けているからだと思います。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;
4

3 に答える 3

11

反復ごとに新しいオブジェクトを作成する必要があります。

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']
    );
} 
于 2012-07-30T18:54:47.630 に答える
1

私は次のようなもので行きます:

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

$namesArrayViktorが述べたように、私も参照で渡すことを試みます。私のコードは、各反復をプッシュするための完全に新しい配列を作成します。これにより、dpnが上書きされないようになります。また、インデックスを介して配列にアクセスして配列に何かを追加する場合は、次を使用する必要があります。

// 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";
于 2012-07-30T19:03:09.617 に答える
0

試す

array_push(&$namesArray,$nameAndCode);

array_push参照またはポインタが必要だと思います。

使用していない理由はあります$namesArray[]か?上記の代わりに:

$namesArray[] = $nameAndCode;
于 2012-07-30T18:55:05.790 に答える