2016-07-08 4 views
0
public productname = array();  

public function prepare_product(){ 
     if(!empty($this->directoryfile)){ 

     //create empty class 
     $imagesrc = new stdClass(); 

     $table = $this->directoryfile; 

     $sql = "SELECT * FROM $table "; 

     $results = $this->select($sql); 

    while($row = $results->fetch(PDO::FETCH_ASSOC)){ 

     //get all data from mysql. 

     $productname[] = $row['PRODUCT_NAME']; 

    } 

    //i think here is the problem , i get 2 array with same data. 
    foreach($productname as $map){ 
    $imagesrc->name = $map; 
    $productImage[] = $imagesrc; 
    } 
} 
} 

私の意図は、空のクラスの新しいはstdClassを(作成)と、配列のような、 名格納することです:PRODUCT_NAMEを、しかし、私は、同じデータを持つ2の配列を取得します。保存配列から同じデータを取得

この名前のようになります。product_name1、name:product_name2;しかし、私はこの名前のようなリターンを得た:product_name2、名前:product_name2;

私が望むものを手に入れるには? stdclass()$ imagesrcを使ってデータを保存すると、名前のタイトルなしでデータを取得できます。

$ productImage [] = $ map;

+0

私はあなたの参照(いない値)を保存するので、これは、発生したと仮定$ imagesImage [] = $ imagesrc; ' – Jeff

+0

クエリは最初に正しい結果を返しますか? foreachに入る前に$ productname配列に正しい値または重複がありますか? –

答えて

0

属性 'name'を繰り返して、同じオブジェクトを参照しています。

ジェフが答えを出しました。

あなたは絶対に将来の目的のために2回目の繰り返しが必要な場合は

の操作を行います。

foreach($productname as $map){ 
    $imagesrc = new stdClass(); 
    $imagesrc->name = $map; 
    $productImage[] = $imagesrc; 
} 

または:

foreach($productname as $map){ 
    $imagesrc->name = $map; 
    $productImage[] = clone($imagesrc); 
} 
1

あなたが達成したい何をすべき$productname[] = $row['PRODUCT_NAME'];後にこの行を追加すると、第2のループobsoletを作る:あなたが見ることができるように、それを作成するときに、私たちが直接オブジェクトとして配列をキャストすることができ

$productImage[] = (Object) array("name"=> $row['PRODUCT_NAME']); 

$imagesrcへの参照を$productImageに保存してから、$imagesrc( 'product_name2')に内容を変更したという問題がありました。

関連する問題