1
我想要做的事:PHP在数组最后添加替换所有存储阵列值
- 从数据库中获取结果。
- 通过分配给stdClass来获取所需的值。
- 将这些对象放在数组中。 (<-问题)
- 并输出为JSON。
对象没问题,他们得到正确的值。但是,当它们被分配给数组一次时,它们会替换所有以前的数组值。
我使用CodeIgniter来做数据库的东西。
功能:
function get_prizes(){
//All prize objects are stored here
$prizes = array();
//Prize object
$prize = new stdClass();
$prize->name1 = '';
//$prize->type = '';
//Getting the prizes from a simple database table
$query = $this->db->get('prizes');
if($query->num_rows() > 0){
foreach ($query->result() as $row):
$prize_name = $row->prize_name;
$prize->name1 = $prize_name;
//$prize->type = $prize_name;
$prizes[] = $prize;
echo " Item: " . print_r($prizes, true) . "<br>";
endforeach;
}
echo json_encode($prizes);
}
输出:
Item: Array ([0] => stdClass Object ([name1] => Radio))
Item: Array ([0] => stdClass Object ([name1] => Television) [1] => stdClass Object ([name1] => Television))
Item: Array ([0] => stdClass Object ([name1] => Toaster) [1] => stdClass Object ([name1] => Toaster) [2] => stdClass Object ([name1] => Toaster))
[{"name1":"Toaster"},{"name1":"Toaster"},{"name1":"Toaster"}]
我试过array_push()。也做同样的事情。
谢谢你,完美的作品。为什么需要在里面实例化?它是如何改变数组中的值,如果他们已经分配? –
在PHP中,对象是通过引用传递的,所以当你在循环外部创建对象时,每次迭代只会使用一个对象,并将被添加到数组中(使用不同的索引)。属性'name1'将保留最后一个值'Toaster';因此,您需要在每次迭代中创建一个新对象。 –