4

配列をループして、記事名を出力します。

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

これは明らかに次のようなものを生成します

Apple, Banana, Mango,

しかし、私は探しています:

Apple, Banana, Mango

次のような implode ステートメントを試しました。

<?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
?>

これらのどれも私のために働いていません。どうすれば正しくできますか?ヒントをありがとう!

4

5 に答える 5

6

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
?>
于 2010-12-19T09:48:08.890 に答える
6

最初のループ反復を確認し、テキストの前にカンマを書き、最初の反復でこのカンマをそのままにしておく方がはるかに簡単です。

<?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)

于 2010-12-19T09:49:20.917 に答える
3

あなたが望むことをするためのより良い方法です:

<?php
$string = '';
if ($articles) { 
    foreach($articles as $article) { 
        $string .= $article->name.", ";       
    }
}
$string = substr($string, 0, -2);
echo $string;
?>
于 2010-12-19T09:54:50.017 に答える
0

トリム機能を使用して、最後のカンマとスペースを削除できます。それは最も簡単な方法です..

<?php
    if ($articles) { 
         foreach($articles as $article) { 
             echo trim(implode(", ", $article->name), ', '); 
         }
     }
?>
于 2013-03-21T18:42:09.937 に答える
0

PHP には優れた配列関数がたくさんありますが、これはそのうちの 1 つです。

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

また

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

__toString 関数を使用した上記の応答も非常に気に入っていますが、これらの配列関数を表示したかったのは、これらの配列関数が支持されているか不要な foreach ループで十分に使用されていないことが多いためです。

于 2010-12-19T10:04:53.317 に答える