следующий элемент в ассоциативном массиве php - PullRequest
2 голосов
/ 26 мая 2011

Это кажется таким простым, но я не могу понять,

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

Мне нужно получить следующий элемент в массиве, но я не могу понять это ... так например

Если у меня есть

$users_emails['Spence']

Мне нужно вернуть matt@someplace.com, и если его

$users_emails['Paul'] 

мне нужно начать сверху и вернуть spence@someplace.com

Я попробовал это

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

и это также

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

но они не возвращают то, что я ожидаю

Ответы [ 3 ]

6 голосов
/ 26 мая 2011
reset($array);
while (list($key, $value) = each($array)) { ...

Reset () перематывает указатель массива на первый элемент, each () возвращает ключ и значение текущего элемента в виде массива, затем переходит к следующему элементу.

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

Для навигации вы можете использовать next($array), prev($array), reset($array), end($array), в то время как данные читаются с использованием current($array) и / или key($array).

Или вы можете использовать foreach, если перебираете все из них

foreach ($array as $key => $value) { ...
3 голосов
/ 26 мая 2011

Вы можете сделать что-то вроде этого:

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

Однако я думаю, что у вас может быть ошибка в вашей логике, и то, что вы делаете, можно сделать лучше, например, используя цикл foreach.

0 голосов
/ 26 мая 2011

Было бы лучше хранить их в индексированном массиве, чтобы получить требуемую функциональность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...