Php - получить первый и последний ключ и значение из массива

Из заданного массива (например: $_SERVER) мне нужно получить первый и последний ключ и значение. Я пытался использовать array_shift, чтобы получить первое значение и ключ, но получаю значение.

Вот массив $_SERVER:

print_r($_SERVER, true))

И я пробовал:

echo array_shift($_SERVER);
Вот массив $ _SERVER Это так? Я не вижу массива !!
RiggsFolly 13.09.2018 19:36

Используйте функцию array_keys, чтобы получить все ключи в массиве, а затем используйте array_shift. Аналогично array_values ​​для всех значений в массиве.

Madhur Bhaiya 13.09.2018 19:38

Зачем это вообще может быть полезно? Гарантировано ли когда-нибудь, что этот массив будет определенным порядком?

iainn 13.09.2018 19:39

@ Мати Урбаниак, ты пробовал с array_slice()?

Always Sunny 13.09.2018 20:01
1
4
3 188
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете сделать цикл foreach и прервать его после первого:

foreach ( $_SERVER as $key => $value ) {
    //Do stuff with $key and $value
    break;
}

Множество других методов здесь. Здесь вы можете выбрать свой любимый вкус.

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

Если вам нужен ключ, используйте array_keys. Если вам нужно значение, просто обратитесь к нему с помощью ключа, полученного от array_keys.

$count = count($_SERVER);
if ($count > 0) {
  $keys = array_keys($_SERVER);
  $firstKey = $keys[0];
  $lastKey = $keys[$count - 1];
  $firstValue = $array[$firstKey];
  $lastValue = $array[$lastKey];
}

Вы не можете использовать $count - 1 или 0 для получения первого или последнего значения в массивах с ключом.

С PHP> = 7.3 вы можете получить это быстро, без модификации массива и без создания копий массива:

$first_key = array_key_first($_SERVER);
$first_value = $_SERVER[$first_key];

$last_key = array_key_last($_SERVER);
$last_value = $_SERVER[$last_key];

См. array_key_first и array_key_last.

Вызывает ли цикл foreach копии массива? Это интересное решение, не знал, что эти функции реализованы.

Goodbye StackExchange 13.09.2018 19:45
foreach не создает копии массива, но изменяет указатель массива. В ситуациях самый это не имеет значения, но все же
Alex Shesterov 13.09.2018 19:52

Как насчет этого:

$server = $_SERVER;
echo array_shift(array_values($server));
echo array_shift(array_keys($server));

обратное:

$reversed = array_reverse($server);
echo array_shift(array_values($reversed));
echo array_shift(array_keys($reversed));
Ответ принят как подходящий

Разделите ключи и значения в отдельные массивы и извлеките из них первый и последний:

// Get all the keys in the array
$all_keys = array_keys($_SERVER);

// Get all the values in the array
$all_values = array_values($_SERVER);

// first key and value
$first_key = array_shift($all_keys);
$first_value = array_shift($all_values);

// last key and value (we dont care about the pointer for the temp created arrays)
$last_key = end($all_keys);
$last_value = end($all_values);

/* you can use reset function after end function call 
   if you worry about the pointer */

Странно видеть голоса против. Любое объяснение, ребята? было бы полезно!

Madhur Bhaiya 13.09.2018 20:01

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

Christian 13.09.2018 21:07

Спасибо, @Christian!

Madhur Bhaiya 13.09.2018 21:24

Я думаю, что array_slice () поможет вам.

<?php
$a = array_slice($_SERVER, 0, 1);
$b = array_slice($_SERVER, -1, 1, true);
//print_r($_SERVER);
print_r($a);
print_r($b);

?>

ВЫХОД

Array ( [TERM] => xterm )
Array ( [argc] => 1 )

ДЕМО:https://3v4l.org/GhoFm

Другие вопросы по теме