Я пишу создатель SQL-запроса, используя некоторые параметры. В Java очень просто обнаружить последний элемент массива из цикла for, просто проверяя текущую позицию массива с длиной массива.
for(int i=0; i< arr.length;i++){
boolean isLastElem = i== (arr.length -1) ? true : false;
}
В PHP они имеют нецелые индексы для доступа к массивам. Поэтому вы должны перебирать массив, используя цикл foreach. Это становится проблематичным, когда вам нужно принять какое-то решение (в моем случае добавить или / и параметр при построении запроса).
Я уверен, что должен быть какой-то стандартный способ сделать это.
Как вы решаете это в PHP?
Ответы:
Похоже, вы хотите что-то вроде этого:
При этом вы не должны перебирать «массив», используя
foreach
в php.источник
$numItems = count($arr)
хитрость не нужна и снижает читабельность - в PHP нет снижения производительности для доступа к счетчику ($ arr) каждый раз. Причина в том, что количество элементов внутренне сохраняется как специальное поле в заголовке массива и не рассчитывается на лету. Этот трюк происходит от других языков (C, Java?, ...).Вы можете получить значение последнего ключа массива
end(array_keys($array))
и сравнить его с текущим ключом:источник
$lastKey = array_search(end($array), $array);
почему так сложно?
Это добавит, после каждого значения, кроме последнего!
источник
Когда toEnd достигает 0, это означает, что он находится на последней итерации цикла.
Последнее значение все еще доступно после цикла, так что если вы просто хотите использовать его для большего количества вещей после цикла, это лучше:
Если вы не хотите обрабатывать последнее значение как специальные внутренние циклы. Это должно быть быстрее, если у вас большие массивы. (Если вы повторно используете массив после цикла внутри той же области, вы должны сначала «скопировать» массив).
И чтобы ответить на ваш оригинальный вопрос "в моем случае добавить или / и параметр при построении запроса"; это зациклит все значения, затем соединит их вместе в строку с «и» между ними, но не перед первым значением или после последнего значения:
источник
$lastValue = array_pop($array);
Спасибо.Ответов уже много, но стоит посмотреть на итераторы, особенно потому, что об этом спрашивают стандартным способом:
Вы можете найти что-то более гибкое и для других случаев.
источник
i=0;
и++i;
всегда казался хакерским в языке сценариев, таких как PHP.Одним из способов может быть определение наличия итератора
next
. Если рядом с итератором нет следующего, это означает, что вы находитесь в последнем цикле.источник
Итак, если ваш массив имеет уникальные значения массива, то определение последней итерации тривиально:
Как видите, это работает, если последний элемент появляется в массиве только один раз, в противном случае вы получите ложную тревогу. В этом нет, вы должны сравнить ключи (которые являются уникальными наверняка).
Также обратите внимание на строгий оператор копаризации, который довольно важен в этом случае.
источник
Предполагая, что у вас есть массив, хранящийся в переменной ...
источник
получить первый и последний элемент из массива foreach
источник
Вы все еще можете использовать этот метод с ассоциативными массивами:
источник
Если вам нужно что-то сделать для каждого элемента, кроме первого или последнего, и только если в массиве более одного элемента, я предпочитаю следующее решение.
Я знаю, что есть много решений выше и опубликовано за месяцы / год до моего, но это то, что я считаю довольно элегантным само по себе. Проверка каждого цикла также является булевой проверкой, в отличие от числовой проверки «i = (count-1)», которая может позволить уменьшить накладные расходы.
Структура цикла может показаться неудобной, но вы можете сравнить ее с упорядочением тегов thead (начало), tfoot (конец), tbody (текущий) в тегах таблицы HTML.
Например, в терминах веб-разработки, если вы хотите добавить border-bottom для каждого элемента, кроме последнего в неупорядоченном списке (ul), тогда вы можете вместо этого добавить border-top для каждого элемента, кроме первого (CSS: first-child, поддерживаемый IE7 + и Firefox / Webkit поддерживает эту логику, тогда как: last-child не поддерживается IE7).
Вы также можете свободно использовать переменную $ first для каждого вложенного цикла, и все будет работать отлично, поскольку каждый цикл делает $ first false во время первого процесса первой итерации (поэтому разрывы / исключения не вызовут проблем) ,
Пример вывода:
источник
Это должен быть простой способ найти последний элемент:
Ссылка: Ссылка
источник
У меня есть сильное чувство, что в корне этой "проблемы XY" ОП хотел просто
implode()
функционировать.источник
Поскольку ваше намерение найти массив EOF только для клея. Познакомьтесь с нижеприведенной тактикой. Вам не нужно требовать EOF:
о / р:
источник
Как насчет использования "конца"? http://php.net/manual/en/function.end.php
источник
Похоже, вы хотите что-то вроде этого:
источник
Не добавляйте запятую после последнего значения:
Массив:
Функция:
Результат:
лорем, ипсум, долор, сиди, амет
источник
Вы можете сделать подсчет ().
или если вы ищете ТОЛЬКО последний элемент, вы можете использовать end ().
возвращает только последний элемент.
и, как оказалось, вы можете индексировать php-массивы целыми числами. Это совершенно доволен
источник
$a = array(0=>'A', 2=>'B', 'aaa'=>'C')
. Что вы получите, если получите доступ$a[count($a)-1]
?Вы также можете сделать что-то вроде этого:
источник
Мне нравится следующее, поскольку я чувствую, что это довольно опрятно. Давайте предположим, что мы создаем строку с разделителями между всеми элементами: например, a, b, c
источник
Ссылка
источник
Вот еще один способ сделать это:
источник
Если я вас понимаю, то все, что вам нужно, это обратить массив и получить последний элемент командой pop:
источник
Вы также можете попробовать это сделать ваш запрос ... показанный здесь с INSERT
источник
Для сценариев, генерирующих SQL-запросы, или для чего-либо, что выполняет другое действие для первого или последнего элемента, гораздо быстрее (почти в два раза быстрее) избежать ненужных проверок переменных.
Текущее принятое решение использует цикл и проверку внутри цикла, которая будет выполняться every_single_iteration, правильный (быстрый) способ сделать это заключается в следующем:
Небольшой домашний тест показал следующее:
test1: 100000 прогонов модели Морг
время: 1869.3430423737 миллисекунд
test2: 100000 прогонов модели, если последний
время: 3235.6359958649 миллисекунд
источник
Другой способ - запомнить предыдущий результат цикла цикла и использовать его в качестве конечного результата:
источник
Я лично использую такую конструкцию, которая позволяет легко использовать элементы html <ul> и <li>: просто изменить равенство для другого свойства ...
Массив не может содержать ложные элементы, но все остальные элементы, которые приводятся к ложному логическому значению.
источник
Вы можете непосредственно получить последний индекс:
$numItems = count($arr);
echo $arr[$numItems-1];
источник
источник
Вот мое решение: просто получите счетчик вашего массива, минус 1 (так как они начинаются с 0).
источник