foreach

  • 例えば以下のような7つの要素を持った配列がある。

    $item_arr = array('A','B','C','D','E','F','G');

    この配列の中身(要素)をすべて表示(出力)したい時

    最も簡単なのは

    PHP

    foreach($item_arr as $item){
        echo $item;
    }
    

    出力結果

    ABCDEFG

    要素の羅列で構わなければこれで良いが、個々の区切りが分からないから、普通は出力時に「、」やカンマ、「/」のような記号を付けて書き出す。

    PHP

    foreach($item_arr as $item){
        echo $item;
        echo ('/');
    }
    

    出力結果

    A/B/C/D/E/F/G/

    個々の区切りは判別しやすくなったが、各要素の出力時に「/」を付加しているため、当然最後の要素(G)の後にも「/」が書き出されている。
    このままではデータとして中途半端な感じが否めない。

    最後の「/」を削除するにはいくつかの方法がある。

    まずは、カンマ区切りのデータで最後のカンマを1つ削りたい時にも使う「rtrim」

    例)

    $str = rtrim($str, ",");
    

    次に、最後の文字を削除する「substr」

    $str = substr($str, 0, -1);
    

    ただしこの場合、区切りに2バイトの文字や記号を使っていると文字化けする。

    区切りに2バイト文字や2バイトの記号を使っている場合は、マルチバイトに対応した「mb_substr」を使う。
    引数に文字コードを正しく指定することがポイント。

    $str = mb_substr($str,0,1,"utf-8");
    

    そして別の方法として、最初から無駄なカンマや記号を出力しない方法もある。

    処理の流れ

    $item_arr = array(‘A’,’B’,’C’,’D’,’E’,’F’,’G’);

    配列の数をカウントする
    $cnt = count($item_arr);

    カウンターの初期化
    $i = 0;

    foreachで各処理を行う
    foreach($item_arr as $item){

    カウンターに1を加算
    $i++;

    要素を出力
    echo $item;

    カウンターが配列の個数と違う場合はカンマや「/」を付加
    if($cnt !=$i){echo(‘ / ‘);}
    }

    出力結果

    A/B/C/D/E/F/G

    解説

    配列の個数は常に「7」
    Aの時 → カウンター「1」 → 「/」を付加
    Bの時 → カウンター「2」 → 「/」を付加
    Cの時 → カウンター「3」 → 「/」を付加
    Dの時 → カウンター「4」 → 「/」を付加
    Eの時 → カウンター「5」 → 「/」を付加
    Fの時 → カウンター「6」 → 「/」を付加
    Gの時 → カウンター「7」

    Gの時、配列の個数「7」とカウンターの数値が一致するから「/」は付加されない。

    実際のスクリプト

    $item_arr = array('A','B','C','D','E','F','G');
    $cnt = count($item_arr);
    $i = 0;
    foreach($item_arr as $item){
        $i++;
        echo $item;
        if($cnt !=$i){echo(' / ');}
    }
    

    サクッと全部に付加して最後に削るか、ちょっと手間をかけて無駄な付加をしないようにするか、目的や状況に合わせて使い分けるといい。

  • Javascriptでforeachを使いたい時

    ·

    PerlやPHPでよく使うeachをJavascriptで使う時はforを使う

    var ar = new Array(“あ”,”い”,”う”,”え”,”お”);
    for(var i in ar){
        document.write(ar[i] + ‘<br>’);
    }

    連想配列の時は

    var ar2 = {‘あ’:’a’,’い’:’b’,’う’:’c’,’え’:’d’,’お’:’e’};
    for(var i in ar2){
        document.write(i + ‘=’ + ar2[i] + ‘<br>’);
    }