【问题标题】:How to remove the first element of array without changing its key value? [duplicate]如何在不更改其键值的情况下删除数组的第一个元素? [复制]
【发布时间】:2013-09-05 18:59:12
【问题描述】:

我在 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() 是否仅适用于一维数组?现在键值被重置...

【问题讨论】:

  • 你想删除第一个元素,不管它的键,还是删除 key = "a" 的元素?
  • @Ganesh:你在你的问题中给出了一个错误的例子。您在示例中展示的内容是错误的(尽管您仍然有意义)。
  • @Barmar 我想删除数组的第一个键及其值而不影响其他键值。我给出的问题就是一个例子。我需要处理这种数组。

标签: php arrays


【解决方案1】:

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

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

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

【讨论】:

  • 对于给出的示例,您不需要重置数组(但您也可以只使用array_shift 所以... :))
  • 好吧,显然这个例子只是一个例子。谁会创建一个数组并立即删除它的第一个成员?一旦数组被使用,你就不能确定它的内部指针在哪里。
  • 是的,你可以。这是可以预见的。但是,事实证明@Ganesh 可能真的只是给出了一个与他想学习的内容几乎完全无关的例子:)
  • @hakre 我现在已经编辑了问题...
  • @Ganesh 不,current() 不能保证返回第一个数组成员的密钥(尽管大多数情况下确实如此)。如果您想安全起见并避免难以跟踪的错误,请使用我的方法。
【解决方案2】:
$array=array("a"=>"123","b"=>"234","c"=>"345");
unset($array["a"]) ;
var_dump($array) ;

另外,你用的是什么版本的PHP?

array_shift 对我来说可以很好地使用字符串索引数组,并且我得到了预期的结果。

【讨论】:

  • array_shift 重置数组键值...
  • @Ganesh:不适合你给的例子
【解决方案3】:

本题的解法如下:

<?php

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

?>

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

【讨论】:

  • $array[current(array_keys($array))] 比它需要的长得多。更好的方法是$array[key($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);
?>

【讨论】:

  • 感谢您的回答。我已经为我解决的这个问题添加了答案
猜你喜欢
  • 2014-11-10
  • 2021-12-28
  • 2021-12-03
  • 1970-01-01
  • 2019-10-02
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多