答え :
解決:
これを処理する方法はいくつかあります。たとえば、配列の最初の要素の設定を解除してから繰り返し処理することもできますが、最初のパラメーターを除くすべてを生成して配列をパラメーターとして渡す関数を適用することもできます。
$num = ["20", "40", "89", "300", "190", "15"];
$new = 0;
$dropFirst = static fn ($_, string ...$a) => yield from $a;
foreach ($dropFirst(...$num) as $val) {
$new = $val;
echo "Value: $new\n";
}
$variable
よりもforeach
現在のニーズは、コンテキストによって異なると思います。
上記の$dropFirst
は、すばやく実践的なIterator
(Generator
サブタイプの形式)であり、他のより冗長なものに簡単に置き換えることができます。
ArrayIterator
でラップしてからLimitIterator
使用できます。
$num = ["20", "40", "89", "300", "190", "15"]; $iterator = new LimitIterator( new ArrayIterator($num), 1 ); $new = 0; foreach ($iterator as $val) { $new = $val; echo "Value: $newn"; }
これは確かにより多くのコード行ですが、反復を実行した時点(foreach
)から制限を分離し、変数のみを渡すことができます(制御の反転とも呼ばれます)。
反対に、コントロールをforeach
本体に配置して、最初の要素をスキップすることもできます。たとえば、単純なインデックスチェックでは次のようになります。
$num = ["20", "40", "89", "300", "190", "15"]; $new = 0; foreach ($num as $index => $val) { if (0 === $index) { continue; } $new = $val; echo "Value: $newn"; }
したがって、これらの例のすべて(および他の回答の例)が機能している場合でも、自分のケースのどこに制御を配置するかを考える必要があります。
- 元のデータを変更する(再定義する)
foreach
'の内容を変更する(表す)foreach
本体を変更します(現在)