0

次のコードではprint_r、whileループ内の最初のコードがさまざまなストーリーコンテンツを出力します。私が抱えている問題は、2番目のステートメントが配列print_rからまったく同じストーリーを何度も生成することです。$stories

$stories = array();

while($row = mysql_fetch_array($result)){
  $story->name      = $row['Name'];
  ...
  $story->date      = $row['Date'];

  print_r($story); //for testing
  array_push ( $stories , $story );
}

print_r($stories);

編集:誰かがコマンドライン出力を要求しましたが、これはホストされたアカウントです。上記が明確でない場合:

ループの内側から:

(
    [id] => 9370
    [name] => Five Below, Inc.
    ...
)
stdClass Object
(    
    [id] => 9362
    [name] => Peregrine Pharmaceuticals Inc.
    ...
)   
stdClass Object
(
    [id] => 9363
    [name] => Mitel Networks Corporation
)
...
stdClass Object
(
    [id] => 9370
    [name] => Five Below, Inc.
    ...
)

ループ後:

Array
(
    [0] => stdClass Object
        (
            [id] => 9370
            [name] => Five Below, Inc.
            ...
        )
    [1] => stdClass Object
        (
            [id] => 9370
            [name] => Five Below, Inc.
        ) 
    [2] => stdClass Object
        (
            [id] => 9370
            [name] => Five Below, Inc.
        )
4

1 に答える 1

1

問題はにあるよう$storyです。テストケースコードを作成しました:

$rows = array(
         array('Name'=>'1', 'Date'=>'21'),
         array('Name'=>'4', 'Date'=>'24'),
);

$stories = array();

foreach( $rows as $row ) {
  $story->name      = $row['Name'];
  $story->date      = $row['Date'];

  array_push( $stories , $story );
}

print_r($stories);

を生成します

[0] => stdClass Object
    (
        [name] => 4
        [date] => 24
    )
[1] => stdClass Object
    (
        [name] => 4
        [date] => 24
    )

これは間違っています。ただし、unset($story);毎回新しいオブジェクトを追加して作成することで、問題が解決します。

$rows = array(
         array('Name'=>'1', 'Date'=>'21'),
         array('Name'=>'4', 'Date'=>'24'),
);

$stories = array();

foreach( $rows as $row ) {
  unset( $story );   // replace with whatever code you use to create new object
  $story->name      = $row['Name'];
  $story->date      = $row['Date'];

  array_push( $stories , $story );
}

print_r($stories);

正しいを与える:

[0] => stdClass Object
    (
        [name] => 1
        [date] => 21
    )

[1] => stdClass Object
    (
        [name] => 4
        [date] => 24
    )
于 2012-12-02T19:22:33.137 に答える