12

配列のサブセットを取得するためにこの関数を書きました。PHPには、このための組み込み関数がありますか。ドキュメントで見つけられません。車輪を再発明するのはもったいないようです。

function array_subset($array, $keys) {
    $result = array();
    foreach($keys as $key){
        $result[$key] = $array[$key];
    }
    return $result;
}
4

3 に答える 3

15

これもずっと欲しい。Underscore のpickの PHP バージョンのように。

それは醜くて直観に反していますが、私が時々することはこれです(これはprodigitalsonが得ていたものかもしれないと思います):

$a = ['foo'=>'bar', 'zam'=>'baz', 'zoo'=>'doo'];

// Extract foo and zoo but not zam
print_r(array_intersect_key($a, array_flip(['foo', 'zoo'])));
/*
Array
(
    [foo] => bar
    [zoo] => doo
)
*/

array_intersect_keyは、キーが 2 番目の引数に存在する最初の引数のすべての要素 (および存在する場合は、後続のすべての引数) を返します。ただし、キーとキーを比較するため、便宜上array_flipを使用します。使用することもでき['foo' => null, 'zoo' => null]ましたが、それはさらに醜いです。

于 2016-10-26T19:23:56.580 に答える
11

array_diff_keyそしてarray_intersect_keyおそらくあなたが望むものです。

于 2010-08-11T03:10:56.537 に答える