Если вам нужно что-то сделать для каждого элемента, кроме первого или последнего, и только в том случае, если в массиве имеется более одного элемента, я предпочитаю следующее решение.
Я знаю, что существует много решений выше и размещено месяцев/за год до моего, но это то, что я чувствую, достаточно элегантно. Проверка каждого цикла также является логической проверкой, в отличие от числовой проверки «i = (счет-1)», что может позволить уменьшить накладные расходы.
Структура петли может показаться неудобной, но вы можете сравнить ее с упорядочением тегов (начало), tfoot (end), tbody (current) в тегах 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;
}
Например, с точки зрения веб-разработки, если вы хотите добавить границы дна к каждому элементу, за исключением последнего в неупорядоченном списке (ул), то вместо этого можно добавить пограничную-топ для каждого элемента, кроме первого (CSS: first-child, поддерживаемый IE7 + и Firefox/Webkit, поддерживает эту логику, тогда как последний-последний не поддерживается IE7).
Вы можете свободно повторно использовать переменную $ first для каждого вложенного цикла, и все будет работать нормально, поскольку каждый цикл делает первый первый ложь во время первого процесса первой итерации (так что breaks/exceptions won ' не вызывают проблем).
$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)
. Вы пытаетесь определить, следует ли вам конкатрировать «И» или «ИЛИ» между части предложения where? –
, просто указывая, что вы должны хранить общее количество в переменной вместо вызова метода для каждой итерации. for (int i = 0, int t = arr.length; i
OIS
http://stackoverflow.com/questions/156650/does-the-last-element-in-a-loop-deserve-a-separate-treatment – xtofl