简体   繁体   中英

next element in a associative php array

This seems so easy but i cant figure it out

$users_emails = array(
'Spence' => 'spence@someplace.com', 
'Matt'   => 'matt@someplace.com', 
'Marc'   => 'marc@someplace.com', 
'Adam'   => 'adam@someplace.com', 
'Paul'   => 'paul@someplace.com');

I need to get the next element in the array but i cant figure it out... so for example

If i have

$users_emails['Spence']

I need to return matt@someplace.com and if Its

$users_emails['Paul'] 

i need start from the top and return spence@someplace.com

i tried this

$next_user = (next($users_emails["Spence"]));

and this also

 ($users_emails["Spence"] + 1 ) % count( $users_emails )

but they dont return what i am expecting

reset($array);
while (list($key, $value) = each($array)) { ...

Reset() rewind the array pointer to the first element, each() returns the current element key and value as an array then move to the next element.

list($key, $value) = each($array);
// is the same thing as
$key = key($array); // get the current key
$value = current($array); // get the current value
next($array); // move the internal pointer to the next element

To navigate you can use next($array) , prev($array) , reset($array) , end($array) , while the data is read using current($array) and/or key($array) .

Or you can use foreach if you loop over all of them

foreach ($array as $key => $value) { ...

You could do something like this:

$users_emails = array(
'Spence' => 'spence@someplace.com', 
'Matt'   => 'matt@someplace.com', 
'Marc'   => 'marc@someplace.com', 
'Adam'   => 'adam@someplace.com', 
'Paul'   => 'paul@someplace.com');

$current = 'Spence';
$keys = array_keys($users_emails);
$ordinal = (array_search($current,$keys)+1)%count($keys);
$next = $keys[$ordinal];
print_r($users_emails[$next]);

However I think you might have an error in your logic and what you are doing can be done better, such as using a foreach loop.

You would be better storing these in an indexed array to achieve the functionality you're looking for

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM