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

У меня есть массив в php

<?php
$array=array("a"=>"123","b"=>"234","c"=>"345");
array_shift($array);
//array("0"=>"234","1"=>"345");
?>

Если я использую эту функцию, значение ключа изменяется. Я хочу, чтобы мое ключевое значение оставалось неизменным. Как удалить первый элемент без влияния на значения ключа массива. Мой ответ должен быть похож на

array("b"=>"234","c"=>"345");

Примечание. Пожалуйста, не используйте foreach(); Я хочу сделать это с помощью существующих функций массива в php

Функция array_splice работает над указанным выше массивом. Но рассмотрим приведенный ниже массив

<?php
$array = Array
(
    '39' => Array
        (
            'id' => '39',
            'field_id' => '620'

        ),

    '40' => Array
        (
            'id' => '40',
            'field_id' => '620',
            'default_value' => 'rrr',

));

array_splice($array, 0, 1);
print_r($array);
?>

Он показывает ответ следующим образом:

Array ( [0] => Array ( [id] => 40 [field_id] => 620 [default_value] => rrr ) )

Могу ли я узнать причину? Будет ли array_splice() работать только для одномерного массива? Теперь значение ключа reset...

Ответы

Ответ 1

Если вы не знаете, что такое первый элемент key:

// Make sure to reset the array current index
reset($array);

$key = key($array);
unset($array[$key]);

Ответ 2

$array=array("a"=>"123","b"=>"234","c"=>"345");
unset($array["a"]) ;
var_dump($array) ;

Кроме того, какую версию PHP вы используете?

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

Ответ 3

Решение этого вопроса выглядит следующим образом:

<?php

unset($array[current(array_keys($array))]);

?>

Он удаляет первый элемент, не влияя на значения ключа.

Ответ 4

<?php function array_kshift(&$array)
{
list($k) = array_keys($array);
$r  = array($k=>$array[$k]);
unset($array[$k]);
return $r;
}

// test it on a simple associative array
$array=array("a"=>"123","b"=>"234","c"=>"345");

array_kshift($array);
print_r($array);
?>