1

私はしばしばこの状況に遭遇します:

foreach ($someObjects as &$someObject)
{
  $someObjectsIndex[$someObject->id] = $someObject;
}

この:

$thingsIActuallyWant = [];
foreach ($associativeList as &$associativeItem)
{
  $thingsIActuallyWant[] = $associativeItem['id'];
}

foreachループを記述せずに、既存のメソッドまたはこれらのものをより短く記述するための何かがあるかどうか疑問に思いました。

4

2 に答える 2

2

array_map必要な要素だけの配列を返すために使用できます。

2番目の例の場合:

$thingsIActuallyWant = array_map(function($a){
    return $a['id'];
}, $associativeList);

1つ目は、との醜い混乱になるため、そのまま使用することをお勧めしforeachます。array_maparray_combine

于 2013-01-21T20:38:28.003 に答える
1

次のような関数を自分で作成してみてください。

function pluck($arr, $key)
{
    $tbr = array();

    foreach ($arr as $val)
    {
        if (is_array($val) && isset($val[$key]))
        {
            $tbr []= $val[$key];
        }
        elseif (is_object($val) && isset($val->$key))
        {
            $tbr [] = $val->$key;
        }
    }

    return $tbr;    
}

次に、それを呼び出すことができます:

$thingsIActuallyWant = pluck($associativeList, 'id');

さらに、必要がない限り、foreachループを参照して変数を渡すことは避けてください。

于 2013-01-21T20:35:18.480 に答える