2011-03-01 123 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