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 ) ) |
我能知道原因吗?数组拼接()是否仅适用于一维数组??现在键值被重置…
- 是否要删除第一个元素(不管其键为何),或删除键为"a"的元素?
- @甘尼什:在你的问题中,你给出了一个错误的例子。你用这个例子证明的是错误的(尽管你仍然意味着什么)。
- @Barmar我想删除数组的第一个键及其值,而不影响其他键值。我给出的问题就是一个例子。我需要处理这种数组。
如果您不知道第一个项目的key是什么:
1 2 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)]。
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);
?> |