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.
$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.
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 ;)
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
}
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);