20

我的数组如下所示:

$arValues = array( 345 => "jhdrfr", 534 => "jhdrffr", 673 => "jhrffr", 234 => "jfrhfr" );

如何删除数组的第一个元素,但保留数字键?由于array_shift将我的整数键值更改为0, 1, 2, ....

我尝试使用unset( $arValues[ $first ] ); reset( $arValues );继续使用第二个元素(现在是第一个),但它返回false.

我怎样才能做到这一点?

4

6 回答 6

20
reset( $a );
unset( $a[ key($a)]);

一个更有用的版本:

// rewinds array's internal pointer to the first element
// and returns the value of the first array element. 
$value = reset( $a );

// returns the index element of the current array position
$key   = key( $a );

unset( $a[ $key ]);

功能:

// returns value
function array_shift_assoc( &$arr ){
  $val = reset( $arr );
  unset( $arr[ key( $arr ) ] );
  return $val; 
}

// returns [ key, value ]
function array_shift_assoc_kv( &$arr ){
  $val = reset( $arr );
  $key = key( $arr );
  $ret = array( $key => $val );
  unset( $arr[ $key ] );
  return $ret; 
}
于 2013-09-30T17:12:45.633 回答
15
// 1 is the index of the first object to get
// NULL to get everything until the end
// true to preserve keys
$arValues = array_slice($arValues, 1, NULL, true);
于 2013-09-30T17:26:12.090 回答
5

当我需要这样做时,我使用了:

unset($a[array_key_first($a)]);

array_key_first()于 2018 年底在 PHP 7.3 中引入/可用。我不需要为我的用例处理指针,但是您仍然可以reset($a)在需要时运行。我没有看到任何最近的答案,所以我想添加这个。

于 2021-08-27T01:58:23.560 回答
1
function array_shift_associative(&$arr){
    reset($arr);
    $return = array(key($arr)=>current($arr));
    unset($arr[key($arr)]);
    return $return; 
}

此函数使用 biziclop 的方法,但返回一key=>value对。

于 2014-09-19T21:41:40.040 回答
0

这对我来说很好......

$array = array('1','2','3','4');

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

var_dump($key, $value, $array, current($array));

输出:

int(0) 
string(1) "1" 
array(3) { [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" }
string(1) "2"
于 2013-09-30T17:15:48.750 回答
0

我的解决方案类似于@PhilF 的解决方案,但与旧版本的 PHP 兼容 - 当您需要编写与PHP 7.3之前的 PHP 版本兼容的代码时,这种情况很少见。

如果$myArray看起来像这样:

[
  345 => "jhdrfr",
  534 => "jhdrffr",
  673 => "jhrffr",
  234 => "jfrhfr"
]

然后array_keys($myArray)将如下所示:

[
  345,
  534,
  673,
  234
]

并且array_keys($myArray)[0]将是:

345

所以:

unset($myArray[array_keys($myArray)[0]]);

将删除第一个元素,而不重置 keys,给出结果:

[
  534 => "jhdrffr",
  673 => "jhrffr",
  234 => "jfrhfr"
]
于 2021-12-28T23:33:40.603 回答