12

次のような連想配列があります。

$myArray = array(
  'key1' => 'val 1',
  'key2' => 'val 2'
  ...
);

前もってキー値がわかりませんが、2 番目の要素からループを開始したいと考えています。上記の例では、key2 以降になります。

私は試した

foreach(next(myArray) as $el) {

}

しかし、それはうまくいきませんでした。

代替案はあるかもしれませんarray_sliceが、それは面倒です。明らかな何かが欠けていますか?

4

8 に答える 8

5

これは、これを 1 回だけ行うか複数回行うか、および後で元の配列が必要かどうかによって異なります。

「初めて」のパターン

$first = true;
foreach ($array as $key=>value) {
    if($first) {
        $first = false;
        continue;
    }
    // ... more code ...
}

私は個人的にこのソリューションをかなり頻繁に使用しています。また、新しい配列を作成してもパフォーマンスが低下することはなく、ループ後も元の配列を操作できます。

ただし、このようなループが 2 つある場合は、ループごとに 5 行の追加コードが必要になるため、少し不潔に見え始めます。

array_shift

array_shift($array);
foreach ($array as $key=>value) {
    // .... more code ....
}

array_shiftは、最初の要素を必要としないというこの特殊なケースに合わせて調整された関数です。$array = array_slice($array, 1)本質的には、特に元の配列を変更するため、完全に明白ではないかもしれないPerlっぽい言い方です。

したがって、シフトされた配列が複数回必要であり、後で元の配列も必要な場合は、元の配列のコピーを作成してシフトすることをお勧めします。

配列スライス

そしてもちろん、array_sliceそれ自体があります。array_slice元の配列を変更せずに残しておき、スライスされた配列を複数回必要とする場合は、何も問題はありません。ただし、常に 1 つの要素だけを切り取りたいと確信している場合は、短縮形を使用することもできますarray_shift(必要に応じて前にコピーを作成します)。

于 2013-09-08T20:46:07.593 に答える
2

あなたは明白な方法で行くことができます:

$flag = false;
foreach($myArray as $el) {
   if($flag) {
      // do what you want
   }
   $flag = true;
}
于 2013-09-08T20:14:13.923 に答える
1

あなたは試すことができます:

$temp = array_shift($arr);
foreach($arr as $val) {
   // do something
}
array_unshift($arr, $temp);
于 2013-09-08T20:18:20.150 に答える
0

この問題が発生したときの私のかなり簡単な解決策。必要に応じて、最初の要素以上をスキップできるように簡単に変更できるという優れた利点があります。

$doomcounter = 0;    
foreach ($doomsdayDevice as $timer){ if($doomcounter == 0){$doomcounter++; continue;} 

   // fun code goes here

}
于 2015-01-29T19:19:16.883 に答える