最初または最後の要素を除くすべての要素に対して何かを行う必要があり、配列に複数の要素がある場合にのみ、次の解決策をお勧めします。
上記の多くの解決策があり、私の投稿の数か月または 1 年前に投稿されていることは知っていますが、これはそれ自体でかなりエレガントだと感じているものです。ループごとのチェックは、数値の「i=(count-1)」チェックとは対照的に、ブール値のチェックでもあり、オーバーヘッドが少なくなる可能性があります。
ループの構造がぎこちなく感じるかもしれませんが、HTML の table タグの thead (開始)、tfoot (終了)、tbody (現在) の順序と比較できます。
$first = true;
foreach($array as $key => $value) {
if ($first) {
$first = false;
// Do what you want to do before the first element
echo "List of key, value pairs:\n";
} else {
// Do what you want to do at the end of every element
// except the last, assuming the list has more than one element
echo "\n";
}
// Do what you want to do for the current element
echo $key . ' => ' . $value;
}
たとえば、Web 開発用語で、順序付けられていないリスト (ul)の最後の要素を除くすべての要素に border-bottom を追加する場合、代わりに最初の要素を除くすべての要素に border-top を追加できます(CSS : IE7+ でサポートされている first-child と Firefox/Webkit はこのロジックをサポートしていますが、:last-child は IE7 ではサポートされていません)。
ネストされたループごとに $first 変数を自由に再利用することもできます。最初の反復の最初のプロセスですべてのループが $first を false にするため、問題なく動作します (したがって、ブレーク/例外は問題を引き起こしません)。 .
$first = true;
foreach($array as $key => $subArray) {
if ($first) {
$string = "List of key => value array pairs:\n";
$first = false;
} else {
echo "\n";
}
$string .= $key . '=>(';
$first = true;
foreach($subArray as $key => $value) {
if ($first) {
$first = false;
} else {
$string .= ', ';
}
$string .= $key . '=>' . $value;
}
$string .= ')';
}
echo $string;
出力例:
List of key => value array pairs:
key1=>(v1_key1=>v1_val1, v1_key2=>v1_val2)
key2=>(v2_key1=>v2_val1, v2_key2=>v2_val2, v2_key3=>v2_val3)
key3=>(v3_key1=>v3_val1)