Если вам нужно что-то сделать для каждого элемента, кроме первого или последнего, и только если в массиве более одного элемента, я предпочитаю следующее решение.
Я знаю, что есть много решений выше и опубликовано за месяцы / год до моего, но это то, что я считаю довольно элегантным само по себе. Проверка каждого цикла также является булевой проверкой, в отличие от числовой проверки «i = (count-1)», которая может позволить уменьшить накладные расходы.
Структура цикла может показаться неудобной, но вы можете сравнить ее с упорядочением тегов thead (начало), tfoot (конец), tbody (текущий) в тегах таблицы HTML.
$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;
}
Например, в терминах веб-разработки, если вы хотите добавить border-bottom для каждого элемента, кроме последнего в неупорядоченном списке (ul), тогда вы можете вместо этого добавить border-top для каждого элемента, кроме первого (CSS: first-child, поддерживаемый IE7 + и 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)