2013-09-30 9 views
11

Moja tablica wygląda następująco:array_shift ale zachowujące klucze

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

Jak mogę usunąć pierwszy element tablicy, ale zachować klawiszy numerycznych? Od array_shift zmienia moje wartości liczby całkowitej na 0, 1, 2, ....

Próbowałem użyć unset($arValues[ $first ]); reset($arValues);, aby kontynuować używanie drugiego elementu (teraz pierwszy), ale zwraca false.

Jak mogę to osiągnąć?

Odpowiedz

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

Nieco bardziej użyteczna wersja:

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

Funkcje:

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

Ponieważ szczególnie chcemy poradzić sobie z pierwszym elementem. 'reset()' przenosi tablicę ponter do pierwszego elementu, 'key()' zwraca indeks tego elementu. – biziclop

+0

Po użyciu tego, nazywam 'current ($ a);', który zwraca wartość false. Co jest nie tak? – Patrick

+0

Próbowałem szybko googling, który będzie obecny element po rozbrojeniu, ale nic nie znalazłem. "Jeśli wewnętrzny wskaźnik wskazuje poza końcem listy elementów lub tablica jest pusta, current() zwraca FALSE." – biziclop

0

Działa to dobrze dla mnie ...

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

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

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

wyjściowa:

int(0) 
string(1) "1" 
array(3) { [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" } 
string(1) "2" 
6
// 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); 
+0

zwraca również false ... – Patrick

+0

@Indianer jesteś pewien? Właśnie go przetestowałem i działa dobrze. – pNre

+0

nie Mam na myśli wywołanie current() po tym, jak zwraca false – Patrick

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

funkcja ta wykorzystuje metodę biziclop, ale zwraca klucz => pary wartości.