如何动态添加到对象数组?

时间:2011-12-19 07:33:29

标签: php

所以当使用mysql_fetch_object()时,你怎么做这样的事情:

$array = array();
while($row = mysql_fetch_object($result))
{
     $array[] = $row;
}

如何使用对象而不是数组来实现这一目标?像,

$object = new stdClass;
while($row = mysql_fetch_object($result))
{
     $object[] = $row;
}

有没有办法在没有很多丑陋的类型转换的情况下做到这一点?

3 个答案:

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