Я хочу обнаружить первый и последний элемент внутри цикла 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
php
5
peace_love 26 Апр 2016 в 15:12

5 ответов

Лучший ответ

Нет необходимости в цикле 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
7
Murad Hasan 26 Апр 2016 в 12:23

Попробуй это

<?php

  $path = "monkey/cat/horse";

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


$data= $arr;
echo end($data);  //last value
echo reset($data);  //firast value
?>
0
JYoThI 26 Апр 2016 в 12:38

У вашего кода есть только небольшая проблема, попробуйте изменить текущую функцию с помощью функции сброса. Как это:

$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";
    }
}

Вот справка о функции "сброса": http://php.net/manual/es/function.reset.php

С уважением!

1
Idir Ouhab Meskine 26 Апр 2016 в 12:25

Получить длину массива.

Получите счетчик и увеличьте его по 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

Live демо

1
Pupil 26 Апр 2016 в 12:23

Это прекрасно работает.

$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;
}
3
Basti 26 Апр 2016 в 12:29