最初または最後以外のすべての要素に対して何かを行う必要があり、配列に複数の要素がある場合のみ、次の解決策をお勧めします。
上記には多くの解決策があり、数か月前/ 1年前に投稿されていますが、これはそれ自体がかなりエレガントだと感じています。すべてのループのチェックも、数値の "i =(count-1)"チェックとは対照的にブールチェックであり、オーバーヘッドを減らすことができます。
ループの構造は扱いにくいかもしれませんが、HTMLテーブルタグの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を追加する場合は、最初の要素(CSS を除く)を除くすべての要素にborder-topを追加できます。 IE7 +およびFirefox / Webkitでサポートされているfirst-childはこのロジックをサポートしていますが、: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)