2

別の配列に基づいて配列を除外するために使用するクラスに filterArray メソッドがあります。

function filterArray($needle, $heystack, $always = array())
{
    foreach($heystack as $k => $v)
    {
        if( !in_array($v, $needle) && !in_array($v, $always) )
            unset($heystack[$k]);
    }

    return $heystack;
}

使用法:

$chars  = array('l', 'J', 'F');
$keys   = array('d','D','j','l','N','S','w','z','W','F','m','M','n','t','L','o','Y','y','a','A','c','r','e','T');
$keys   = filterArray($chars, $keys, array('z'));

$alwaysこれは、常に存在する必要があり、除外されるべきではない項目の配列であることに注意してください。キーの結果は次のとおりです。

$keys   = array('l', 'J', 'F', 'z');

これは、より多くの検証プロセスです。これを記述してパフォーマンスを最適化するより良い方法はありますか? パフォーマンスが重要なクラスで使用されるためです。

ありがとうございました。

4

2 に答える 2

3

キーの関連付けを維持する必要があるかどうかを指定していません。キーの関連付けが必要ない場合は、次の機能を実行できます。

function filterArray($needle, $heystack, $always = array())
{
    return array_intersect(array_merge($needle, $always), $heystack);
}
于 2013-09-02T13:02:25.223 に答える
1

これでうまくいくはずです。

function filterArray($needle, $heystack, $always = array()) {

    $merged = array_merge($needle, $always);

    return array_intersect($heystack, $merged);
}
于 2013-09-02T12:59:04.473 に答える