所以当使用mysql_fetch_object()时,你怎么做这样的事情:
$array = array();
while($row = mysql_fetch_object($result))
{
$array[] = $row;
}
如何使用对象而不是数组来实现这一目标?像,
$object = new stdClass;
while($row = mysql_fetch_object($result))
{
$object[] = $row;
}
有没有办法在没有很多丑陋的类型转换的情况下做到这一点?
答案 0 :(得分:2)
第一种方法是正确的,
它应该将所有对象分配到$array
,
像一个数组,
你可以通过
$arr[0]->$COLUMN ...
我打赌你不是指这个: -
$object = new stdClass;
while($row = mysql_fetch_object($result))
{
$props = "object_{$cnt}";
$object->$props = $row;
++$cnt;
}
第二种方法是将每个对象分配给$ object的属性,
您可以将属性指定为: -
$object->object_0->$COLUMN ...
答案 1 :(得分:0)
其他语言(如C ++,C#和Java)支持“泛型”,因此您不必进行“大量丑陋的类型转换”。 PHP不是 - 因此一般需要演员。
但是在你的情况下......当你把它放入数组时,“$ row”作为一个对象开始...当你取消引用数组时,你不会得到同样的对象吗?
答案 2 :(得分:0)
$object = array();
while($row = mysql_fetch_object($result))
{
$object[] = $row;
}
$object = new stdClass($object);
或
class myClass{
private $counter = 0;
public function add($row){
$count = $counter++;
$this->$count = $row;
}
}
$object = new myClass();
while($row = mysql_fetch_object($result))
{
$object->add($row);
}
或
class myClass implements ArrayAccess{
private $counter = 0;
public function offsetSet($offset, $value) {
if (is_null($offset)) {
$count = $counter++;
$this->$count = $value;
} else {
$this->$offset = $value;
}
}
public function offsetExists($offset) {
return isset($this->$offset);
}
public function offsetUnset($offset) {
unset($this->$offset);
}
public function offsetGet($offset) {
return isset($this->$offset) ? $this->$offset : null;
}
}
$object = new myClass();
while($row = mysql_fetch_object($result))
{
$object[] = $row;
}