PHP - Как получить элемент перед последним элементом от массива?

Как я могу получить элемент перед последним элементом от массива в PHP5?

48
задан Manny Calavera 5 September 2013 в 01:46
поделиться

4 ответа

$array[count($array)-2]

Это должен быть массив с числовым индексом (с нуля). У вас должно быть как минимум 2 элемента, чтобы это сработало. (очевидно)

71
ответ дан 7 November 2019 в 12:00
поделиться

array_slice принимает отрицательное смещение в качестве второго аргумента. Это даст вам единственный массив элементов, содержащий второй последний элемент:

$arr = array(1,2,3,4,5,6);
array_slice($arr, -2, 1);

Если вам нужно только одно значение, у вас есть несколько вариантов. Если вы не против использования промежуточной переменной, вы можете просто получить первое значение с помощью [0] или вызвать array_pop или array_shift, им обоим нужна переменная, переданная по ссылке, иначе вы получите предупреждения в строгом режиме.

Или вы можете просто использовать array_sum или array_product, что немного взломано, но отлично работает для массивов с одним элементом.

16
ответ дан 7 November 2019 в 12:00
поделиться

Это будет работать даже с этим массивом:

$array[0] = "hello";
$array[5] = "how";
$array[9] = "are";

end($array);
echo prev($array); // will print "how"

Другие решения, использующие count (), предполагают, что индексы вашего массива идут по порядку ; используя end и prev для перемещения указателя массива, вы получаете фактические значения. Попробуйте использовать метод count () в массиве выше, и он не удастся.

121
ответ дан 7 November 2019 в 12:00
поделиться

Да, оба этих образца кода ведут себя одинаково путь в параллельной среде. Изменчивые поля никогда не кэшируются локально , поэтому после того, как один поток вызывает update (), который заменяет список новым списком, затем get () во всех других потоках возвращает новый список.

Но если у вас есть код, который использует его так:

list = get()
list = list.add(something) // returns a new immutable list with the new content
update(list)

то он не будет работать так, как ожидалось на любом из этих примеров кода (если два потока делают это параллельно, то изменения, сделанные одним из них, могут быть перезаписаны другим). Но если только один поток обновляет список, или новое значение не зависит от старого значения, то никаких проблем.

-121--3338956-

Рекомендуется использовать делегата от контроллера модального вида обратно к контроллеру вида, открывшему вид. Ознакомьтесь с официальными документами для получения примеров.

Причина того, что это рекомендуемый способ, заключается в том, что ViewController, который первоначально запустил модал, также будет управлять его отменой.

Это действительно просто сделать и думать более элегантно, чем использовать viewWillanDispear - как есть и другие причины, почему вид может исчезнуть!

Создайте протокол на модальном ViewController - xViewControleyDelegate

@protocol xViewControllerDelegate

    - (void) modalDialogFinished;

@end

Затем при определении родительского контроллера представления сделайте родительскую реализацию делегата с помощью < xViewControlterDelegate > .

В родительском контроллере представления будет установлен метод modalDialogFinished, который может обрабатывать отклоненную команду и обновление и т. д.

Не забудьте передать id < xViewControleyDelegate > контроллеру модального представления в коде init и сохранить его в качестве поля объекта.

Когда вы хотите к disssmiss свою модальную точку зрения тогда, вы просто должны сослаться на delegate.modalDialogFinished.

Если это не имеет смысла, то я могу указать вам на какой-то лучший пример кода - но я надеюсь, что использование делегатов не ново для вас.

UPDATE::

Вот официальная документация Apple о том, как это сделать для контроллера модального вида:

http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

-121--1713811-

Метод, который будет работать как для ассоциативного массива, так и для числового массива, заключается в использовании array _ pop () для вывода элемента из конца массива.

$last = array_pop($array);
$second_last = array_pop($array);

// put back the last
array_push($array, $last);
6
ответ дан 7 November 2019 в 12:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: