2012-04-20 4 views
1

私は配列を持っている、キーがあると言うことができます:100、512、610、21、176、64、必要に応じて、私は常に配列をソートすることができます。私は一定値以下のキーを持つ配列値を取り除きたい配列を分割する - 特定の値以下のキーを破棄しますか?

、私は使用せずにこれを実行したいと思います100を取り除くでしょう110、21、および64

の下に言いますforeach。私はおそらく配列をソートしスプライスポイントを見つけることができ、そこからそのチャンクを一気に削除することができる関数がありますか?

ありがとうございます!

+1

はforeachの何が問題なのですか?この要件の目的は目的ですか?解決策は3つの意味のある行を取るだろう – zerkms

+0

私はそれを避けることができればループを使うのが好きではない。さらに、私は、PHPに "ちょっと、あなたはその位置を見ていますか?それ以上のものは全て維持し、他のものはすべて捨ててください"と言う方法があると考えました。 =) – Ryan

+0

"私はそれを避けることができればループを使うのは好きではありません" --- omg。最初のプログラミングルールを覚えておいてください。プログラムは開発者向けであり、コンパイラ用ではありません。だから、理解しやすいコードを書いてください。実装するのに「少ない」行を使うわけではありません。 – zerkms

答えて

4

ループは真剣にそれを行うための最も単純な方法です。

$array = array_intersect_keys(
    $array, 
    array_flip(array_filter(
     array_keys($array), 
     function ($key) { return $key > 110; } 
    )) 
); 

はたぶんあなたの代わりにループを使用する必要がありますけれども、それの楽しみのために、ここでは(目に見える)ループのないソリューションです。

+1

明らかにループが優れています。この「oneliner」は理解するのが本当に難しいです:-) +1は面倒ですが – zerkms

+0

何百行もかかる可能性がある場合、このvsループのパフォーマンスに興味があります。私は明日それを試してみるが、今のところあなたは巧みさのために+1を得る=) – Ryan

+1

@ライアン: 'foreach'はより速くなるでしょう。コードに明らかなループ構造がない場合は、何もないことを意味するわけではありません。このサンプルでは、​​少なくとも** 4 **ループについて考えることができました。 – zerkms

関連する問題