How to remove the first element of array without changing its key value? 
我有一个PHP数组
| 12
 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中现有的数组函数来实现这一点。
数组拼接函数正在为上述数组工作。但是考虑下面的数组
| 12
 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 ) ) | 
我能知道原因吗?数组拼接()是否仅适用于一维数组??现在键值被重置…
		
		
- 是否要删除第一个元素(不管其键为何),或删除键为"a"的元素?
- @甘尼什:在你的问题中,你给出了一个错误的例子。你用这个例子证明的是错误的(尽管你仍然意味着什么)。
- @Barmar我想删除数组的第一个键及其值,而不影响其他键值。我给出的问题就是一个例子。我需要处理这种数组。
 
	 
如果您不知道第一个项目的key是什么:
| 12
 3
 4
 5
 
 | // Make sure to reset the array's current index
reset($array);
$key = key($array);
unset($array[$key]); | 
		
		
- 对于给出的示例,您不需要重置数组(但也可以使用array_shift,因此…:)
- 显然,这个例子只是一个例子。谁会创建一个数组并立即删除它的第一个成员?一旦对数组进行了处理,就不能确定其内部指针所在的位置。
- 是的,你可以。这很容易预测。但是,事实证明,@ganesh可能真的给出了一个与他想学的完全无关的例子:)
- @我现在编辑了这个问题…
- @那么,甘尼什似乎是你最好的选择。
- @AEFXX我找到了解决方案,并将其作为答案发布。其概念是使用current()查找当前的key元素并取消设置key值。
- @ganesh no,current()不能保证返回第一个数组成员的密钥(尽管大多数时候是这样)。如果你想站在安全的一边,避免难以追踪的错误,使用我的方法。
 
	 
另外,您使用什么版本的PHP?
使用字符串索引数组,array_shift对我来说工作得很好,我得到了预期的结果。
		
		
- 数组移位重置数组键值…
- @甘尼什:不是你举的例子。
 
	 
这个问题的解决方法如下:
它在不影响键值的情况下删除第一个元素。
		
		
- $array[current(array_keys($array))]比需要的长得多。更好的方法是$array[key($array)]。
 
	 
| 12
 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);
?> |