Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

next element in a associative php array

Tags:

loops

php

This seems so easy but i cant figure it out

$users_emails = array(
'Spence' => '[email protected]', 
'Matt'   => '[email protected]', 
'Marc'   => '[email protected]', 
'Adam'   => '[email protected]', 
'Paul'   => '[email protected]');

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 [email protected] and if Its

$users_emails['Paul'] 

i need start from the top and return [email protected]

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

like image 220
Matt Elhotiby Avatar asked Mar 19 '26 05:03

Matt Elhotiby


2 Answers

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) { ...
like image 51
Lepidosteus Avatar answered Mar 21 '26 19:03

Lepidosteus


You could do something like this:

$users_emails = array(
'Spence' => '[email protected]', 
'Matt'   => '[email protected]', 
'Marc'   => '[email protected]', 
'Adam'   => '[email protected]', 
'Paul'   => '[email protected]');

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

like image 45
Jonathan Kuhn Avatar answered Mar 21 '26 19:03

Jonathan Kuhn



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!