Array_shift, но сохранить ключи

Мой массив выглядит так:

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

Как удалить первый элемент массива, но сохранить цифровые клавиши? Поскольку array_shift меняет значения моего целочисленного ключа на 0, 1, 2, ....

Я попытался использовать unset( $arValues[ $first ] ); reset( $arValues ); для продолжения использования второго элемента (теперь сначала), но он возвращает false.

Как я могу это достичь?

Ответ 1

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

Немного более полезная версия:

// rewinds array 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; 
}

Ответ 2

// 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);

Ответ 3

Это отлично работает для меня...

$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"

Ответ 4

function array_shift_associative(&$arr){
reset($arr);
$return = array(key($arr)=>current($arr));
unset($arr[key($arr)]);
return $return; 
}

эта функция использует метод biziclop, но возвращает пару с ключом = > значение.