Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

$array[count($array)-2]

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

Что касается меня довольно крошечного решения

end($array);
echo prev($array);

Ответ 5

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

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

// put back the last
array_push($array, $last);

Ответ 6

// Indexed based array
$test = array('a','b','c','d','e');
$count = count($test);
print $test[$count-2];

// Associative Array
$months = array(
         'jan'=>'January', 
         'feb' => 'february', 
         'mar' => 'March', 
         'apr' => 'April'
    );

$keys = array_keys($months);
$count = count($keys);
print $keys[$count-2];

Ответ 7

Все массивы имеют "внутренний указатель массива", который указывает на текущий элемент массива, PHP имеет несколько функций, которые позволяют вам перемещаться по массиву и просматривать текущий ключ и значение элементов.

  • end() - Установить внутренний указатель массива на его последний элемент
  • reset() - Установить внутренний указатель массива на свой первый элемент
  • prev() - перемотка указателя внутреннего массива
  • next() - продвигать внутренний указатель массива массива
  • current() - Возвращает текущий элемент в массиве
  • key() - Получить ключ из массива
  • each() - Возвращает текущую пару ключей и значений из массива и продвигает курсор массива

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

$array = array(
    'before_last' => false,
    'last' => false,
);

end($array); /* 
- set pointer to last element -> $array['last']
- return new current element value if it exists, -> false
- else return FALSE 
*/

prev($array); /* 
- set pointer one place before current pointer -> $array['before_last']
- return new current element value if it exists, -> false
- else return FALSE 
*/

if(!is_null(key($array)){ /* 
- return current element key if it exists -> "before_last"
- else return NULL
*/
    $before_last_element_value = current($array); /* 
    - return current element value if it exists, -> false
    - else return FALSE 
    */
}

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

Ключ может быть integer или string. Значение может быть любого type. источник

key() возвращает значение текущего ключа, если элемент существует, иначе он вернет NULL. Действительный ключ никогда не может быть NULL, поэтому, если возвращается null, мы можем определить, что элемент не существует.