我想将许多对象推入数组
并且每个对象具有不同的值
但是当我把它们推入数组时
它们的所有值都相同
如何解决这个问题?
$sql="select password, mail from account";
$result=mysql_query($sql);
$arr=array();
while($row=mysql_fetch_assoc($result))
{
$o->pw=$row['password'];
$o->mail=$row['mail'];
array_push($arr, $o);
}
echo json_encode($arr);
答案 0 :(得分:8)
那是因为你每次都将同一个对象推入数组。
您应该在每次迭代中推送一个新对象。例如,如果$o
是stdClass
对象,请在循环中使用$o = new stdClass
:
while($row=mysql_fetch_assoc($result))
{
$o = new stdClass;
$o->pw=$row['password'];
$o->mail=$row['mail'];
array_push($arr, $o);
}
您也可以使用mysql_fetch_object
,这可能更合适:
while($o=mysql_fetch_object($result))
{
array_push($arr, $o);
}
上述对象的属性将根据您的SQL查询列命名,因此要获得相同的效果,您还需要将查询更改为select password AS pw, mail from account
。
最后,另一种选择是每次clone对象 - 尽管其他选择几乎总是更可取:
while($row=mysql_fetch_assoc($result))
{
$o = clone $o;
$o->pw=$row['password'];
$o->mail=$row['mail'];
array_push($arr, $o);
}
答案 1 :(得分:4)
首先尝试声明$ o(在while循环中):
$o = new stdClass;
答案 2 :(得分:3)
这是因为对象被添加到数组中作为引用。数组中的每个元素都是对象的引用,即同一个对象。
您没有声明$o
,所以当您第一次执行$o->pw
时,PHP会为您创建一个对象。当它执行此操作时,它会在循环范围之外创建它,因此循环的每次迭代都指向相同的$o
。
您需要声明$o
每次循环迭代。
while($row=mysql_fetch_assoc($result))
{
$o = new stdClass;
$o->pw = $row['password'];
$o->mail = $row['mail'];
array_push($arr, $o);
}
答案 3 :(得分:1)
你真的不需要在php中使用push,你可以使用空括号来解决它。不确定它是否有所作为,但我发现括号更容易。此外,O似乎没有在此代码中定义,或在循环中重置。这可能是问题的根源所在,虽然我对你的整体问题不是很清楚。祝你好运
$sql="select password, mail from account";
$result=mysql_query($sql);
$arr=array();
while($row=mysql_fetch_assoc($result))
{
//define/reset o here
$o->pw=$row['password'];
$o->mail=$row['mail'];
$arr[] = $o;
}
echo json_encode($arr);
答案 4 :(得分:1)
我认为你需要为循环的每次迭代实例化一个新对象。现在只有一个$ o被写入循环的每次迭代,这就是为什么它们看起来都具有相同的值:它们是相同的。
试试这个:
while($row=mysql_fetch_assoc($result))
{
$o = new stdClass();
$o->pw=$row['password'];
$o->mail=$row['mail'];
array_push($arr, $o);
}
答案 5 :(得分:0)
$sql="select password, mail from account";
$result=mysql_query($sql);
$data = [];
while($row=mysql_fetch_assoc($result)){
array_push($data, ['password' => $row['password'],
'mail' => $row['mail'],]);
}
header('Content-Type: application/json');
$encode_data = json_encode($data);
echo $encode_data;