2012-07-18 106 views
0

我消費,返回稱爲$viewData像這樣對象的數組Web服務:使用array_filter()返回兩個數組?

Array 
(
    [0] => stdClass Object 
     (
      [id] => 64757 
      [title] => Frogger 
      [votes] => 1 
      [status] => gotit 
     ) 

    [1] => stdClass Object 
     (
      [id] => 64758 
      [title] => The Legend of Zelda 
      [votes] => 1 
      [status] => wantit 
     ) 

    [2] => stdClass Object 
     (
      [id] => 64759 
      [title] => Grand Theft Auto 
      [votes] => 1 
      [status] => wantit 
     ) 

) 

我需要把這個分成兩個單獨的數組 - 包含狀態爲wantit所有的對象之一,而其他人的地位是。

我可以用array_filter()用自定義函數獲取一個陣列出來的:

if(is_array($viewData) and (!empty($viewData))) { 
    function splitGames($v){ 
     if ($v->status==="gotit") { 
      return true; 
     } 
     return false; 
    } 

    $gotEm = array_filter($viewData, "splitGames"); 
    print_r($gotEm); 

} 

該函數返回我所期望的:

Array 
(
    [0] => stdClass Object 
     (
      [id] => 64757 
      [title] => Frogger 
      [votes] => 1 
      [status] => gotit 
     ) 
) 

是否有辦法來自動獲取原始數組剩下的部分放到第二個數組中,還是需要第二個自定義函數來查找「wantit」的狀態,然後在原始數組上重新運行array_filter()

+1

array_filter只返回一個數組。你不能讓它在一次調用中返回多個數組。 – 2012-07-18 18:08:27

回答

1

如果您需要兩個陣列,您需要撥打array_filter兩次。

或者,您可以從兩個空數組開始,然後在$viewData上循環一次,根據status值將每個數組成員放入兩個數組中的一箇中。

這有幫助嗎?

+0

是的,我知道我可以像那樣循環;我只是希望找到更有效率的東西。 – EmmyS 2012-07-18 18:30:50

1

你也可以使用array_walk。

$wantit = array(); 
$gotit = array(); 


function wantitorgetit($arr, $key, $arrs) 
{ 


if ($arr->status=='wantit') 
    { 

     $arrs[0][]=$arr; 
    } 
else 
    { 
    $arrs[1][] =$arr; 
    } 

} 




$arrs = array(&$wantit,&$gotit); 
array_walk($Viewdata, 'wantitorgetit', $arrs); 

print_r($wantit); 
print_r($gotit);