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()并存储数组,如: name:product_name,但我得到2个包含相同数据的数组。
它假设像这个名字:product_name1,name:product_name2;但我收到了这样的名字:product_name2,name:product_name2;
如何获得我想要的东西?如果我使用stdclass()$ imagesrc存储数据,我会得到我想要的数据而没有名称标题。
$ productImage [] = $ map;
答案 0 :(得分:1)
在mtcars[sapply(mtcars, class) == "Date"]
之后添加此行应该执行您想要实现的目标并使第二个循环变为obsolet:
$productname[] = $row['PRODUCT_NAME'];
如您所见,我们可以在创建数组时直接将数组转换为对象。
您遇到的问题是您将$productImage[] = (Object) array("name"=> $row['PRODUCT_NAME']);
的引用存储到$imagesrc
,然后更改了$productImage
的内容(更改为' product_name2')。
答案 1 :(得分:0)
您正在更换属性' name'每次迭代并引用同一个对象。
杰克给出了答案。如果你为了将来的目的绝对需要第二次迭代
执行:
foreach($productname as $map){
$imagesrc = new stdClass();
$imagesrc->name = $map;
$productImage[] = $imagesrc;
}
或者:
foreach($productname as $map){
$imagesrc->name = $map;
$productImage[] = clone($imagesrc);
}