1
値置き換え:PHP配列の最後に追加したが、すべての格納された配列は、私が何をしようとしている
- は、データベースから結果を取得します。
- stdClassに割り当てて必要な値を取得します。
- これらのオブジェクトを配列に配置します。 (< - 問題)
- JSONとして出力します。
オブジェクトは正しい値を取得できます。しかし、配列に一度割り当てられると、以前のすべての配列値が置換されます。
DBの処理に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オブジェクトは参照渡しであるため、ループの外にオブジェクトを作成すると、各繰り返しで1つのオブジェクトのみが使用され、配列に(異なるインデックスで)追加されます。プロパティ 'name1'は' Toaster'の最後の値を保持します。したがって、各反復で新しいオブジェクトを作成する必要があります。 –