1

$viewData次のようなオブジェクトの配列を返す Web サービスを使用しています。

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
        )

)

これを 2 つの別個の配列に分割する必要があります。1 つはステータスが wantit であるすべてのオブジェクトを含み、もう 1 つはステータスが gotit です。

array_filter()カスタム関数を使用して、配列を 1 つ取得できます。

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
        )
)

元の配列の残りを 2 番目の配列に自動的に取得する方法はありますか、または「wantit」のステータスを探しarray_filter()て元の配列で再実行する 2 番目のカスタム関数が必要ですか?

4

3 に答える 3

1

2 つの配列が必要な場合は、array_filter2 回呼び出す必要があります。

または、2 つの空の配列から始め$viewDataて、値に基づいて各配列メンバーを 2 つの配列のいずれかに配置して、 を1 回だけループすることもでき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 に答える