使用array_filter()返回两个数组?

时间:2012-07-18 18:06:14

标签: php arrays

我正在使用一个Web服务来返回一个名为$viewData的对象数组,如下所示:

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的所有对象,另一个包含状态为gotit的对象。

我可以通过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()原始阵列?

3 个答案:

答案 0 :(得分:1)

如果您需要两个阵列,则需要拨打array_filter两次。

或者,您可以从两个空数组开始,只需在$viewData上循环一次,根据status值将每个数组成员放入两个数组中的一个。

这有帮助吗?

答案 1 :(得分: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);

答案 2 :(得分:0)

$wantit = [];
$gotit = [];

array_filter($viewData, function ($item) use (&$wantit, &$gotit) {
if ($item['status'] == "wantit") {
    $wantit[] = $item;
} else {
    $gotit[] = $item;
}
return true;
});