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