2011-03-01 134 views
0

我有一个databse类,它返回一个对象数组。我试图从这个单个查询中获取多位数据,以防止必须运行三个查询。PHP:计数对象数组中的值

我已经无意中发现了array_count_values() [http://uk3.php.net/manual/en/function.array-count-values.php],它将非常适合捕获有关我可以使用的结果集的各种数据位。虽然我不知道如何将所有的第二维投入到数组中,而不必仅仅通过全部的回报来完成,我认为这会有点不好。

有没有人有任何想法,我可以如何将我的数组对象作为一个整体转换为数组,以允许此游戏更改函数做到这一点?

Array 
(
    [0] => stdClass Object 
     (
      [message_id] => 23185 
      [from_profile] => 3165 
      [to_profile] => 962 
      [parent_message_id] => 17111 
      [date_sent] => 2011-02-23 05:48:25 
      [subject] => RE: hi 
     ) 
// etc 

还有一个问题,我刚刚想到键入这个问题,草蜢法呃?这个函数能够解析多个维度吗?

+0

对象的属性是你的计数?还是你不计算对象的值? – 2011-03-01 12:11:48

+0

我不确定,但是你的意思是像[array_walk_recusrive](http://php.net/array-walk-recursive)? – Zirak 2011-03-01 12:14:44

回答

1

既然你只需要改变第一个维度,您可以使用array_walk

$dbResultsArray = // db results here 

array_walk($dbResultsArray, function(&$elem) { $elem = (array)$elem; }); 

$dbResultsArray通过引用传递所以一旦array_walk已运行$dbResultsArray已经被更新。

我正在使用需要php 5.3+的闭包,但您可以在旧版本中使用create_function

+0

是的,这似乎是好的,因为它可以让我转换所有元素。虽然不完美,但它仍在循环中。 – 2011-03-01 13:45:50

0

对您的对象数组做一个for循环,并将它们转换为(array)并将它们分配回去, 您不需要进一步嵌套,它只会将typecase放在最顶层。

例如;

$newArr = array(); 
foreach($myObjArr as $t){ 
    $arr = (array)$t; 
    $newArr[] = $arr; 
} 
+0

一个很好的建议,但我宁愿不foreach循环可能是大约300奇怪的结果。 – 2011-03-01 13:44:12

1

我不是很清楚你在说什么,但有一个函数可以对数组元素和对象属性进行计数。

count()

因此,你不需要对象转换成数组用于这一目的。

+0

我不想计算数组,但数组中有什么。 – 2011-03-01 13:44:32