如何在foreach循环中检测第一个和最后一个元素?

5
我想在foreach循环中检测第一个和最后一个元素:
$path = "monkey/cat/horse";

foreach(explode('/', $path) as $segment) {
   echo $segment;
}

我的期望结果是:

first:monkey
last:horse

这是我尝试解决它的方法:
$path = "monkey/cat/horse";
$explode = explode('/', $path);

foreach($explode as $segment) {
    if (current($explode) == $segment){
        echo "first:".$segment;
    } echo "<br>";
    if (end($explode) == $segment){
        echo "last:".$segment;
    }
}

但是我的结果是:
first:horse
last:horse

你可以简单地做到这一点... - Murad Hasan
2
array_poparray_shift可以帮助您。 - David
1
最好的方法是使用reset($arr)end($arr),这将防止您编辑数组,但我认为您不关心这个。$explode = explode('/', $path); echo reset($explode); echo end($explode); - Bobot
5个回答

7
不需要使用foreach循环,只需使用foreach循环和count函数。foreach循环会返回一个数组。
$path = "monkey/cat/horse";

$arr = explode("/", $path);
$count = count($arr);


foreach($arr as $key => $value){
    if($key == 0) echo "first:".$value;
    elseif($key == ($count - 1)) echo "last:".$value;
}

结果。
first:monkey
last:horse

它必须在 for each 循环内部,因为我需要该循环做其他事情。 - peace_love
1
@Jarla,我用foreach循环更新了我的答案,请检查并让我知道。 - Murad Hasan

3

这个很好用。

$path = "monkey/cat/horse";
$explode = explode('/', $path);


echo "first:".current($explode);

echo "<br>";

echo "last:".end($explode);

使用循环:

$path = "monkey/cat/horse";
$explode = explode('/', $path);
$cont = 0;

foreach($explode as $segment) {

    if ($cont == 0){

        echo "first:".$segment;
    } 

    echo "<br>";

    if ($cont > count($segment)){

        echo "last:".$segment;
    }

    $cont = $cont +1;
}

是的,因为你删除了循环,这对我来说是必要的。 - peace_love

1
获取数组长度。
获取计数器并在foreach中递增它。
在循环中:
1)如果计数器是0,那么它是第一个元素。
2)如果计数器是数组计数减一,则为最后一个元素。
<?php
$path = "monkey/cat/horse";
$explode = explode('/', $path);
$len = count($explode);
$i=0;
foreach($explode as $segment) {
 if ($i == 0) {
    echo "first: ".$segment;
    echo "<br/>";
 }
 if ($i == ($len-1)) {
    echo "last: ".$segment;
 }
 ++$i;
}
?>

输出:

first: monkey
last: horse

现场演示


非常感谢!这个可行。我尝试为所有其他情况添加一个else,如果($i == 0) { echo "第一个:" . $segment; echo "<br/>"; } if ($i == ($len-1)) { echo "最后一个:" . $segment; } else {echo "其他:" . $segment;} - peace_love
但是在这里,我也得到了第一个元素“other”。 - peace_love
@Jarla,你犯了一个错误:else只与第二个if有关。 - Alessio Cantarella
1
我已经更新了答案并提供了可用的链接。请访问该链接并检查它是否正常工作。 - Pupil
@AlessioCantarella 谢谢。嗯,我需要找出如何引用两个if语句。以前从未这样做过 :=) - peace_love

1

你的代码只有一个小问题,尝试通过重置函数来更改当前函数。像这样:

$path = "monkey/cat/horse";
$explode = explode('/', $path);
foreach($explode as $segment) {

    if (reset($explode) == $segment){
        echo "first: $segment";
    }

    echo "<br>";

    if (end($explode) == $segment){
        echo "last: $segment";
    }
}

这是关于“reset”函数的参考资料: http://php.net/manual/es/function.reset.php

祝好!


0

试一下

<?php

  $path = "monkey/cat/horse";

  $arr = explode("/", $path);


$data= $arr;
echo end($data);  //last value
echo reset($data);  //firast value
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接