我的数组看起来像这样:
$arValues = array( 345 => "jhdrfr", 534 => "jhdrffr", 673 => "jhrffr", 234 => "jfrhfr" );
如何删除数组的第一个元素,但保留数字键?由于array_shift
将我的整数键值更改为0, 1, 2, ...
.
我尝试使用 unset( $arValues[ $first ] ); reset( $arValues );
继续使用第二个元素(现在是第一个),但它返回false
.
我怎样才能做到这一点?
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;
}
// 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);
当我需要这样做时,我使用了:
unset($a[array_key_first($a)]);
array_key_first()
在 2018 年底在 PHP 7.3 中引入/提供。我不需要处理我的用例的指针,但是您仍然可以在需要时运行reset($a)
。我没有看到任何最近的答案,所以我会添加这个。
function array_shift_associative(&$arr){
reset($arr);
$return = array(key($arr)=>current($arr));
unset($arr[key($arr)]);
return $return;
}
此函数使用 Biziclop 的方法,但返回一个key=>value
对。
这
对我来说很好用...
$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"
我的解决方案类似于@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]]);
将删除第一个元素,而不重置键,给出结果:
[
534 => "jhdrffr",
673 => "jhrffr",
234 => "jfrhfr"
]