PHP:当可能存在“缺失”索引时,查找数组的下一个和上一个值

时间:2011-12-21 21:52:03

标签: php multidimensional-array

我正在使用从我的数据库中检索的一些数据。它被放入一个二维*数组中,并根据数据库中数据的ID手动设置索引。

* 这不仅仅是二维的,但我只需要处理它的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
                )
        )
)

在这个数组中,我只需要使用它的“结果”部分,从而使问题数组二维。

我的脚本中发生了一些巫术魔法,我被告知第一个数组的索引和第二个数组的索引,然后我从第二个数组中提取值。

假设我想获得值“title5”。我的脚本会告诉我我需要使用索引3然后索引2.

我已经完成了所有这些,但这是我坚持的下一部分任务,并且不知道如何尝试。

检索“title5”之后,我想检索下一个和上一个项目的索引,所以在这种情况下“title4”和“title6”。如果没有先前的值(比如我们最初提取“title1”),那么我需要一些方法来识别它,就像使用假布尔值一样。同样,如果没有“下一个”值也是如此。

通过检索索引我的意思是,例如:title4 = 3 & 1title6 = 4 & 0

有没有人有任何想法我应该怎么做呢?我不是在寻找有人为我做这项工作,但我会非常感激。与此同时,我将继续进行实验。谢谢!

注意

  • 标题实际上并不称为title1title2等。所以我不能只减少一个数字并进行搜索。

2 个答案:

答案 0 :(得分:1)

我编辑了@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 />";

答案 1 :(得分:0)

当然,这是一个低级别的解决方案:

$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为null,那么你的索引分别是第一个/最后一个索引,如果不是,那么这些值就是兄弟索引。