2011-12-19 51 views
-1

与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

这并不真正使一个很大的意义。你想让结果对象看起来像什么? – deceze 2011-12-19 07:36:15

+0

你能否澄清预期结果需要做些什么?你想要迭代对象吗? – SeanNieuwoudt 2011-12-19 07:41:59

+1

你想访问这样的行吗? $ object-> 0-> COLUMN 这是不可能的。实际上它没有任何意义。 – 2011-12-19 07:57:14

回答

2

第一种方法是正确的,
应该所有对象分配到$array
像一个数组,
您可以通过

$arr[0]->$COLUMN ... 

我敢打赌,你是不是指这个访问: -

$object = new stdClass; 
while($row = mysql_fetch_object($result)) 
{ 
    $props = "object_{$cnt}"; 
    $object->$props = $row; 
    ++$cnt; 
} 

第二种方法是每个对象分配到$对象的属性,
,您可以在属性分配为: -

$object->object_0->$COLUMN ... 
+0

我知道,但如果我想用对象访问它,该怎么办?如果你只是把它变成一个数组,那么使用mysql_fetch_object有什么意义。编辑:哎呀,误读你的文章。 – CrazeD 2011-12-19 07:36:37

+0

如果你有兴趣,你可以看看对象的SPL存储http://php.net/manual/en/class.splobjectstorage.php – ajreal 2011-12-19 07:40:11

0

其他语言(如C++,C#和Java)的支持“仿制药”,这样你就不必做“很多丑陋的类型转换的”。 PHP不会 - 因此一般需要演员。

但是在你的情况下......如果当你将数组放入数组中时,“$ row”作为一个对象出现......当你去引用数组时,你不会得到同样的对象吗?

+0

PHP数组大约是一般的,它的泛型的想法doesn' t真的适用于PHP。 – deceze 2011-12-19 07:38:41

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