2013-01-09 68 views
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--似乎不正确。

+0

一个问题,我认为之前也保持一个递增的指数,只是用在foreach循环中的关键任务,并确保测试的前面和后面的按键确实存在是$ arr。把$ array放在$ arr中,如果条件和语句里面条件是 –

+0

你的问题看起来像看不见的passage.question应该是short.i认为foreach($ arr as $ keys => $ values)like –

回答

1

你的数组索引已经是数字那么有没有真正需要尝试访问它们

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; 
    } 
} 
+0

使用'$ k => $ v'的非常优雅的解决方案,我从来没有想到过。谢谢! – Sven

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 + your code = Solved。正如马克·贝克指出的那样,如果数组在分配之前未被检查,则数组可能会得到错误的值。

+2

测试年龄匹配数组中的第一个和最后一个条目,否则你的$ prev或$ next分别会出错 –

1

试试这个,比较通过在特定位置(这里$阵列)的foreach分配的元素来比较,而不是$改编[$ i] [“时代”]

$i=0; 

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

    $i++; 
} 
相关问题