在数组中搜索值并比较/获取下一个和上一个值

时间:2013-01-09 09:17:58

标签: php arrays multidimensional-array foreach

我有一个数组$arr,如下所示:

array(3) {
  [0]=>
  array(2) {
    ["food"]=>
    string(5) "Toast"
    ["age"]=>
    string(2) "28"
  }
  [1]=>
  array(2) {
    ["food"]=>
    string(5) "Pizza"
    ["age"]=>
    string(2) "45"
  }
  [2]=>
  array(2) {
    ["food"]=>
    string(5) "Steak"
    ["age"]=>
    string(2) "33"
  }
}

我还有一个变量$curr_age = 45;

现在我正在寻找一种搜索数组的方法,直到找到$arr[$i]["age"] = $curr_age然后停止 另外,我如何从下一个食物中获取食物。以前的数组(例子中的吐司和牛排)?

为了搜索数组,我有这段代码:

$i = 0;

foreach( $arr as $array ){ 

    if( $curr_age == $arr[$i]["age"] ) {

        $next = $arr[$i++]["food"];
        $prev = $arr[$i--]["food"];

    }

    $i++;

 }

正如您可能想象的那样,这不符合预期,我不明白为什么。但令我印象深刻的是,foreach循环实际上仅用于递增$i并且$array从未使用过,但我无法理解如何解决这个或如何执行上面提到的任务。

我想我已经发现在PHP中没有“内置”方式来做这个,需要一个额外的功能,但同样:我不知道该功能需要做什么。我甚至不确定这种说法是否属实。

我已经尝试了array_search,然后简单地将密钥递增/递减1,但由于我认为有两个原因,这不起作用。首先,似乎array_search无法处理这种类型的数组&第二,密钥可以是非连续的,因此执行$x++$x--似乎不正确。

3 个答案:

答案 0 :(得分:1)

$length = count($array);
for ($i = 0; $i < $length; $i++) {
  if( $curr_age == $array[$i]["age"] ) {
    if (i<$length){
        $next = $array[$i+1]["food"];
    }
    if (i>0){
        $prev = $array[$i-1]["food"];
    }
  }
}

Answer for looping an array +您的代码=已解决。 正如Mark Ba​​ker所指出的那样,如果在分配之前未检查数组,则数组可能会得到错误的值。

答案 1 :(得分:1)

试试这个,比较foreach在特定位置分配的元素(这里是$ array)来比较$ arr [$ i] [“age”]

$i=0;

foreach($arr as $array)
{
    if($array['age'] == $curr_age)
    {
        $Previous = $arr[$i-1]['food'];
        $Next = $arr[$i+1]['food'];
        break;
    }

    $i++;
}

答案 2 :(得分:1)

您的数组索引已经是数字的,因此实际上不需要维护递增索引,只需使用foreach循环中的键分配,并确保在尝试访问它们之前测试上一个和下一个键实际存在< / p>

foreach ($arr as $k => $v) {
    if ($v['age'] == $curr_age) {
        if (isset($arr[$k-1])) {
            $prev = $arr[$k-1];
        }
        if (isset($arr[$k+1])) {
            $next = $arr[$k+1];
        }
        break;
    }
}