найти последнюю запись цикла foreach (), не работает - PullRequest
4 голосов
/ 19 декабря 2010

Я перебираю свой массив для вывода названий статей:

<?php
if ($articles) { 
    foreach($articles as $article) { 
        echo $article->name.", ";       
    } // end foreach article
} // end if has articles
?>

Это, очевидно, даст что-то вроде

Apple, Banana, Mango,

Но я ищу:

Apple, Banana, Mango

Я попробовал какое-то утверждение, подобное этому:

<?php
if ($articles) { 
    foreach($articles as $article) { 
        echo implode(", ", $article->name);     
    } // end foreach article
} // end if has articles
?>

или

<?php
if ($articles) { 
    echo implode(", ", $articles->article->name);       
} // end if has articles
?>

Ничто из этого не работает для меня. Как это сделать правильно? Спасибо за подсказки!

Ответы [ 5 ]

6 голосов
/ 19 декабря 2010

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

<?php
if ($articles) { 
    $firstiteration = true:
    foreach($articles as $article) { 
        if(!$firstiteration){
            echo ", ";
        }
        $firstiteration = false;
        echo $article->name;       
    } // end foreach article
} // end if has articles
?>

другая (более красивая в моем варианте) возможность - переопределить метод _toSting () - вашего класса статьи:

...
function __toString(){
    return $this->name;
}
...

и просто echo implode(", ",$articles)

6 голосов
/ 19 декабря 2010

Вы можете использовать foreach, чтобы добавить имена статей в массив, затем implode() этот массив имен.

<?php
if ($articles) { 
    $article_names = array();

    foreach($articles as $article) { 
        $article_names[] = $article->name;
    } // end foreach article

    echo implode(', ', $article_names);
} // end if has articles
?>
3 голосов
/ 19 декабря 2010

Это лучший способ сделать то, что вы хотите:

<?php
$string = '';
if ($articles) { 
    foreach($articles as $article) { 
        $string .= $article->name.", ";       
    }
}
$string = substr($string, 0, -2);
echo $string;
?>
0 голосов
/ 21 марта 2013

Вы можете удалить последнюю запятую и пробел, используя функцию обрезки. Это самый простой способ ..

<?php
    if ($articles) { 
         foreach($articles as $article) { 
             echo trim(implode(", ", $article->name), ', '); 
         }
     }
?>
0 голосов
/ 19 декабря 2010

PHP имеет много хороших функций массива, и это кричит для одной из них.

$namesArray = array_map(function($x){return $x->name;}, $articles);
$string = implode(',' $namesArray);

OR

$first = true;
array_walk(function($x) use (&$first)
           {
               if(!$first) {echo ', ';} else{$first = false;}
               echo $x->name;
           }, $articles);

Мне очень нравится вышеупомянутый ответ с функцией __toString, но я хотел показать эти функции массива, потому что я думаю, что они часто недоиспользуются в пользу или ненужных циклов foreach.

...