Поиск следующей строки массива с помощью PHP
Я работаю в коде, который находит следующее значение массива на основе текущего значения, но все равно всегда возвращает 1 в качестве результата.
$users_emails = array('Spence', 'Matt', 'Marc', 'Adam', 'Paul');
$current = 'Spence';
$keys = array_keys($users_emails);
$ordinal = (array_search($current,$keys)+1);
$next = $keys[$ordinal];
echo $next;
В чем дело?
5 ответов
$keys
являются keys
, не value
, Используйте массив с $ordinal
,
$next = $users_emails[$ordinal];
Демо: https://3v4l.org/REhGr
array_keys
дает вам массив key
s. Используйте ваш обычный массив для array_search
также. Вот изображение того, что вы в настоящее время строите для $keys
,
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
)
Демо: https://3v4l.org/GQQcF
$users_emails = array('Spence', 'Matt', 'Marc', 'Adam', 'Paul');
$current = 'Marc';
$ordinal = (array_search($current, $users_emails)+1);
$next = !empty($users_emails[$ordinal]) ? $users_emails[$ordinal] : FALSE;
echo $next;
Вы ищете неправильный массив, чтобы начать, и повторяет неправильный массив также.
$users_emails = array('Spence', 'Matt', 'Marc', 'Adam', 'Paul');
$current = 'Spence';
$ordinal = (array_search($current,$users_emails)+1);
$next = $users_emails[$ordinal];
echo $next;
Посмотрите мой код, я ищу Спенс в массиве с именами, и он возвращает номер ключа.
Этот номер ключа должен отражаться в электронных письмах пользователя, а не в ключах.
Если вам это нужно для работы с ассоциативными массивами, вам нужно сделать так:
$users_emails = array('a' => 'Spence', 'b' => 'Matt', 'c' => 'Marc', 'd' => 'Adam', 'e' => 'Paul');
$keys = array_values(array_keys($users_emails));
$current = 'Matt';
$next = ""; // set to not get notice if end of array
$ordinal = array_search($current,$users_emails);
$nextkey = (array_search($ordinal, $keys)+1);
If(!isset($keys[$nextkey])){
// what to do if your at the end of array
// $nextkey = 0;
// Echo "message";
// Or whatever you want
}else{
$next = $users_emails[$keys[$nextkey]];
}
echo $next;
Я использую array_values для ключей, чтобы получить индексированный массив, который принимает +1
найти следующий ключ в массиве.
Просто используйте это:
$users_emails = array('Spence', 'Matt', 'Marc', 'Adam', 'Paul');
$current = 'Spence';
$ordinal = array_search($current,$users_emails) + 1;
$next = $users_emails[$ordinal];
echo $next;
Вот что я имею в виду:
<?php
$users_emails = array('Spence', 'Matt', 'Marc', 'Adam', 'Paul');
$current = 'Spence'; $ordinal = array_search($current, $user_emails)+1;
$next = $user_emails[$ordinal];
echo $next;
?>
В зависимости от того, что вы делаете, вы можете использовать next()
вместо:
<?php
$user_emails = array('Spence', 'Matt', 'Marc', 'Adam', 'Paul');
$current = current($user_emails); $next = next($user_emails); reset($user_emails);
echo $next;
?>
Я проверил ваш код. В вашем коде array_keys
функция возвращает индексы $users_email
как:
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 )
Сейчас вы ищете $current = 'Spence';
в массиве индексов. Вот почему это returns 1
,
Вы хотите следующее значение искомой строки, которое вы должны сделать:
$users_emails = array('Spence', 'Matt', 'Marc', 'Adam', 'Paul');
$current = 'Spence';
//$keys = array_keys($users_emails);//print_r($keys);
$ordinal = (array_search($current,$users_emails)+1);
$next = $users_emails[$ordinal];
echo $next;
выход:
Matt