Как получить этот элемент из этого массива

#php #arrays

#php #массивы

Вопрос:

У меня есть массив $arr, который при вводе var_dump выглядит следующим образом. Какой самый простой способ получить 2-й последний элемент (в данном случае «простой»). Я не могу сделать $arr[4], потому что количество элементов может варьироваться в зависимости от URL, и я всегда хочу только 2-й последний. (обратите внимание, что в конце есть дополнительная пустая строка, которая всегда будет там.)

 array
  0 => string 'http:' (length=5)
  1 => string '' (length=0)
  2 => string 'site.com'
  3 => string 'group'
  4 => string 'simple'
  5 => string 'some-test-url'
  6 => string '' (length=0)
  

Комментарии:

1. Почему бы просто не спросить «Как мне получить последний компонент URL в строке?» вместо этого?

2. Обратите внимание, что предпоследние и $arr[4] не одно и то же. Если я не сумасшедший, я бы подумал, что $arr[4] это третий по счету.

3. @ Ignacio Vazquez-Abrams Это не последний. Это 2-й последний или даже 3-й последний, если вы считаете последнюю пустую строку элементом.

4. В качестве дополнительного замечания, но очень важного: если это ваша структура, вы должны создать для нее класс Url. Я уверен, что у вас есть функции, которые управляют этим массивом, поэтому они должны быть методами вашего класса url. Наше кодирование часто настолько слабое в PHP; как сообществу, нам нужно совершенствоваться в использовании хорошо зарекомендовавших себя и структурированных методов.

Ответ №1:

До тех пор, пока это не ключевой или хэшированный массив, и он содержит более двух элементов…

 $arr[count($arr) - 2];
  

Обратите внимание: моя интерпретация от второго до последнего является второй с конца. Это может отличаться от вашего. Если да, вычтите 3.

Ответ №2:

Получить количество и вычесть 3?

 $arr[count($arr)-3]
  

Ответ №3:

 if (!empty($arr) amp;amp; count($arr)>1){
  //or > 2, -3 for your extra ending
  $val = $arr[count($arr)-2];
}
  

Должно вам помочь.

Ответ №4:

 $second_last = count($array) - 3;

$value = $array[$second_last];
  

Ответ №5:

 $arrayLen=count($arr);
echo $arr[$arrayLen-2];
  

Ответ №6:

Еще одна альтернатива:

 echo current(array_slice($data, -3, 1));