如何在不更改其键值的情况下删除数组的第一个元素?

Gan*_*abu 23 php arrays

我在php中有一个数组

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

如果我使用此功能,则键值会更改.我希望我的键值保持不变.如何在不影响数组键值的情况下删除第一个元素.我的回答应该是这样的

array("b"=>"234","c"=>"345");
Run Code Online (Sandbox Code Playgroud)

注意:请不要使用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);
?>
Run Code Online (Sandbox Code Playgroud)

它的答案如下:

Array ( [0] => Array ( [id] => 40 [field_id] => 620 [default_value] => rrr ) )
Run Code Online (Sandbox Code Playgroud)

我可以知道原因吗?array_splice()只适用于单维数组吗?现在键值被重置......

aef*_*fxx 35

如果您不知道第一个项目key是什么:

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

$key = key($array);
unset($array[$key]);
Run Code Online (Sandbox Code Playgroud)

  • @Ganesh不,`current()`不能保证传回第一个数组成员的密钥(虽然大部分时间都是这样).如果你想保持安全并避免难以追踪错误,请使用我的方法. (2认同)

vik*_*ter 6

$array=array("a"=>"123","b"=>"234","c"=>"345");
unset($array["a"]) ;
var_dump($array) ;
Run Code Online (Sandbox Code Playgroud)

另外,您使用的是哪个版本的PHP?

array_shift 使用字符串索引数组对我工作正常,我得到了预期的结果.

  • @Ganesh:不是你给***的例子***. (3认同)

Gan*_*abu 2

这个问题的解答如下:

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

它删除第一个元素而不影响键值。

  • `$array[current(array_keys($array))]` 比它需要的要长得多。更好的方法是“$array[key($array)]”。 (2认同)