从存储阵列中获取相同的数据


getting same data from storing array

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;
    }
}
}

我的目的是创建一个空类 new stdClass() 并存储数组,如下所示:名称:product_name,但我得到 2 个具有相同数据的数组。

它假设像这个名字:product_name1,名字:product_name2; 但是我得到了这样的回报 名字:product_name2,名字:product_name2;

如果我使用 stdclass() $imagesrc 存储数据,我会得到我想要的数据,而没有名称 title。

$productImage[] = $map;

$productname[] = $row['PRODUCT_NAME']; 之后添加此行应该可以完成您想要实现的目标,并使第二个循环过时:

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

如您所见,我们可以在创建数组时直接将数组转换为对象。

遇到的问题是您存储了对$imagesrc $productImage的引用,然后将$imagesrc的内容更改为"product_name2")。

每次迭代都会替换属性"name"并引用相同的对象。

杰夫给出了答案。

如果您绝对需要第二次迭代以备将来使用

做:

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

或:

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