0

$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然后停止。
另外,我如何从下一个和上一个数组中获取食物(例如 Toast 和 Steak)?

为了搜索数组,我有以下代码:

$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--似乎不正确。

4

3 回答 3

2

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

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;
    }
}
于 2013-01-09T10:16:09.983 回答
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"];
    }
  }
}

循环数组的答案+您的代码=已解决。正如 Mark Ba​​ker 所指出的,如果在分配之前没有检查数组,它们可能会得到错误的值。

于 2013-01-09T09:22:25.880 回答
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++;
}
于 2013-01-09T09:36:06.397 回答