1

我正在使用一个 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()在原始数组上重新运行?

4

3 回答 3

1

如果需要两个数组,则需要调用array_filter两次。

或者,您可以从两个空数组开始,然后循环一次$viewData,根据值将每个数组成员放入两个数组之一status

这有帮助吗?

于 2012-07-18T18:18:52.920 回答
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);
于 2012-07-18T18:49:06.870 回答
1
$wantit = [];
$gotit = [];

array_filter($viewData, function ($item) use (&$wantit, &$gotit) {
if ($item['status'] == "wantit") {
    $wantit[] = $item;
} else {
    $gotit[] = $item;
}
return true;
});
于 2019-03-21T17:34:22.193 回答