我正在使用一个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()
原始阵列?
答案 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;
});