7

私はこのようなことをしたい:

foreach ($array as $key=>$value except when $key="id")
{
// whatever

}

...ループの本体内に「if」句を入れる必要はありません。「id」が配列の最初または最後の要素になることは保証されていません。また、配列の設定を解除したりスライスしたりしたくありません。これは、コストがかかり、見苦しく、元のデータを維持できないためです。また、ループ内でキーと値の両方を使用する必要があります。

何か案は?

4

5 に答える 5

16

if節がそのような問題だとは思わない:

foreach ($array as $key => $value) {
    if ($key == 'ignore_me') continue;
    if ($key == 'ignore_me_2') continue;

派手なソリューションが必要な場合は、次を使用できますarray_diff_key

$loop_array = array_diff_key($actual_array, array('ignore_me' => NULL, 'ignore_me_2' => NULL));
foreach ($loop_array as $key => $value) {
    #...
于 2009-04-24T09:19:18.690 に答える
5

ループ内で if 句を使用します。洗練されていない点はなく、最も読みやすく理解しやすく、最も効率的です。

スキップするキーが多数ある場合は、テストするための 2 番目のハッシュを作成できます (if 句で)。

foreach ($array as $key => $value) {
   if (array_key_exists($key,$skip_keys)) continue;
   ...
}
于 2009-04-24T09:28:14.033 に答える
2

内側のループで常に IF 句を使用することになると思います。あなたがすでに与えたすべてのオプションの中で、それが速度とメモリ消費のために私が使用する唯一のものです

于 2009-04-24T09:17:41.377 に答える
1

if私の知る限り、ループなしではそれを行うことはできません。

キーワードが言うように、それは「for each」であり、「for most」ではありません。

編集: soulmergeが言うように、でそれを行うことができますが、キーを 1 つだけ見逃している場合は、単にループにarray_diff_key()入れるよりも冗長でメモリ効率が低くなります。if

于 2009-04-24T09:17:41.750 に答える