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

时间:2016-07-08 14:20:37

标签: php

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;

2 个答案:

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