Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Popping the key & value from an associative array in PHP

Tags:

Let S be an associative array in PHP, I need to retrieve and extract from it the first element, both the value and the key.

I would use

value1=array_pop(S); 

but it only gives me the value.

I can use

K=array_keys(S); key1=array_pop(K); value1=array_pop(S); 

but it is complicated because it requires to have two copies of the same data. WHich is a confusing since the array is itself an element in an array of arrays. There must be a more elegant way to just read the couple key/value while extracting it.

like image 631
Pietro Speroni Avatar asked Jul 07 '11 10:07

Pietro Speroni


People also ask

What happens if you press the key?

As the key is pressed, a switch closes and current flows into a small chip in the keyboard.

Can all keyboard keys be removed?

All mechanical keyboards have removable keycaps. To get keycaps off, you can pry them up with a screwdriver or spudger. You really shouldn't, though. To avoid damage, buy a wire keycap puller.

How do you take off a key without breaking it?

For desktop keyboards, take a butter knife or a screwdriver and try to pry up one corner of the keys. You don't need to use a lot of force; you should feel a pop and the key will come right off. For laptop keyboards, your fingernail should be enough to pull the plastic up.


1 Answers

$value = reset($arr); $key = key($arr); 

(in that order)

See reset()PHP Manual, key()PHP Manual.

unset($arr[$key]); # in case you want to remove it. 

However array_pop()PHP Manual is working with the last element:

$value = end($arr); $key = key($arr); unset($arr[$key]); # in case you want to remove it. 

See end()PHP Manual.

For the fun:

list($value, $key) = array(end($arr), key($arr)); 

or

extract(array('value'=>end($arr), 'key'=>key($arr))); 

or

end($arr); list($key, $value) = each($arr); 

or whatever style of play you like ;)

Dealing with empty arrays

It was missing so far to deal with empty arrays. So it's a need to check if there is a last (first) element and if not, set the $key to null (as null can not be an array key):

for($key=null;$key===null&&false!==$value=end($arr);)     unset($arr[$key=key($arr)]); 

This will give for a filled array like $arr = array('first' => '1st', 'last' => '2nd.');:

string(4) "2nd." # value string(4) "last" # key array(1) { # leftover array   ["first"]=>   string(3) "1st" } 

And an empty array:

bool(false) # value NULL # key array(0) { # leftover array } 

Afraid of using unset?

In case you don't trust unset() having the performance you need (of which I don't think it's really an issue, albeit I haven't run any metrics), you can use the native array_pop() implementation as well (but I really think that unset() as a language construct might be even faster):

end($arr); $key = key($arr); $value = array_pop($arr); 
like image 97
hakre Avatar answered Oct 24 '22 06:10

hakre