关于php:如何删除数组的第一个元素而不更改其键值?

How to remove the first element of array without changing its key value?

本问题已经有最佳答案,请猛点这里访问。

我有一个PHP数组

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

如果我使用这个函数,那么键值就会改变。我希望我的键值保持不变。如何在不影响数组键值的情况下删除第一个元素。我的回答应该是

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

注意:请不要使用foreach();我希望通过php中现有的数组函数来实现这一点。

数组拼接函数正在为上述数组工作。但是考虑下面的数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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);
?>

答案如下:

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

我能知道原因吗?数组拼接()是否仅适用于一维数组??现在键值被重置…


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

1
2
3
4
5
// Make sure to reset the array's current index
reset($array);

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


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

另外,您使用什么版本的PHP?

使用字符串索引数组,array_shift对我来说工作得很好,我得到了预期的结果。


这个问题的解决方法如下:

1
2
3
4
5
<?php

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

?>

它在不影响键值的情况下删除第一个元素。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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);
?>