我有一个数组$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--
似乎不正确。
答案 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 Baker所指出的那样,如果在分配之前未检查数组,则数组可能会得到错误的值。
答案 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;
}
}