Поиск следующей строки массива с помощью 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 дает вам массив keys. Используйте ваш обычный массив для 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;

Посмотрите мой код, я ищу Спенс в массиве с именами, и он возвращает номер ключа.
Этот номер ключа должен отражаться в электронных письмах пользователя, а не в ключах.

https://3v4l.org/0gJ1m



Если вам это нужно для работы с ассоциативными массивами, вам нужно сделать так:

$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 найти следующий ключ в массиве.

https://3v4l.org/iVO6U

Просто используйте это:

$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
Другие вопросы по тегам