PHP: поиск следующего и предыдущего значений массива, когда могут быть «отсутствующие» индексы - PullRequest
1 голос
/ 22 декабря 2011

Я работаю с некоторыми данными, которые извлекаются из моей базы данных. Он помещается в 2-мерный массив * и вручную устанавливает индекс на основе идентификатора данных в базе данных.

* Это более чем двухмерно, но мне нужно работать только с двумя измерениями.

Это рассматриваемый массив:

Array
(
    [error] => Boolean(false)
    [results] => Array
        (
            [1] => Array
                (
                    [0] => title1
                    [4] => title2
                )
            [3] => Array
                (
                    [0] => title3
                    [1] => title4
                    [2] => title5
                )
            [4] => Array
                (
                    [0] => title6
                    [1] => title7
                    [3] => title8
                )
        )
)

Внутри этого массива мне нужно работать только с частью «результатов», поэтому задача становится массивом 2-мерным.

В моем скрипте происходит какое-то волшебство вуду, и мне говорят индекс для первого массива и индекс для второго массива, а затем я извлекаю значение из второго массива.

Допустим, я хотел получить значение "title5". Мой сценарий скажет мне, что мне нужно использовать индекс 3, а затем индекс 2.

Я сделал все это, но это следующая часть задачи, над которой я застрял, и понятия не имею, как вообще попытаться.

После получения «title5» я хочу получить индексы для следующего и предыдущего элемента, поэтому в этом случае для «title4» и «title6». В случае отсутствия предыдущего значения (скажем, мы изначально извлекли «title1»), мне нужен какой-то способ идентифицировать это, например, с помощью ложного логического значения. И также, если нет «следующего» значения.

Под получением индексов я имею в виду, например: title4 = 3 & 1 и title6 = 4 & 0

У кого-нибудь есть идеи, как мне поступить? Я не ищу кого-то, кто сделает работу за меня обязательно, но некоторые указатели будут с благодарностью В то же время я буду продолжать экспериментировать. Спасибо!

Примечание

  • Названия на самом деле не называются title1, title2 и т. Д. Поэтому я не могу просто уменьшить число и выполнить поиск.

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Я немного отредактировал ответ @Jonathan Rich, чтобы получить моё реальное решение. Где $firstIndex и $secondIndex - это два индекса, которые я уже знаю.

//my already known indexes
$firstIndex = 3;
$secondIndex = 2;
//
$prevIndex1 = null;
$prevIndex2 = null;
$last_was_value = false;
$nextIndex1 = null;
$nextIndex2 = null;
foreach ( $articles['results'] as $index => $value ) {
    foreach ( $articles['results'][$index] as $index2 => $value2 ) {
        if ( ($index == $firstIndex) && ($index2 == $secondIndex) ) {
            $last_was_value = true;
        } else if ($last_was_value == true) {
            $nextIndex1 = $index;
            $nextIndex2 = $index2;
            break 2;
        } else if ($last_was_value == false) {
            $prevIndex1 = $index;
            $prevIndex2 = $index2;
        }
    }   
}
echo "<br />PREV: $prevIndex1 & $prevIndex2<br />";
echo "NEXT: $nextIndex1 & $nextIndex2<br />";
0 голосов
/ 22 декабря 2011

Конечно, это решение низкого уровня:

$prev = null;
$last_was_value = false;
$next = null;

foreach ( $foo['results'][$index1] as $index => $value ) {
    if($value == $some_result_value) {
        $last_was_value = true; 
    } elseif($last_was_value == true && $next == null) {
        $next = $index;
    } elseif($last_was_value == false) {
        $prev = $index;
    }
}

Таким образом, в конце, если prev или next равны нулю, то ваш индекс является первым / последним индексом соответственно, а если нет, то эти значения являются родственными индексами.

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