Secura Vita

Category: Works > PHP » PHP:配列をfor・while・foreachを使ってループさせて取り出す
2016/02/05
Works

PHP:配列をfor・while・foreachを使ってループさせて取り出す

PHP:配列をfor・while・foreachを使ってループさせて取り出す

PHPにはループにfor,while,foreach等がありますが、今回はこの3つを使用して配列を取り出す方法を書いていきます。

配列をループさせるのはforeachが一番使い勝手がいい(私はforeachばっかり使ってます…)と思うんですけど。。

連想配列はキーと値を別個に取り出すようにします。

スポンサーリンク

配列の設定

今回は2つの配列を使用します。
通常の値のみの配列とキー・値の連想配列です。

//値のみの配列
$list1 = array( 'pc' , 'smartphone' , 'tablet');

//連想配列
$list2 = array(
            'pc'            => 'パソコン',
            'smartphone'    => 'スマホ',
            'tablet'        => 'タブ'
            );

for

値のみの配列

$count = count( $list1 );
for( $i = 0; $i < $count; ++$i ) {
    echo $list1[$i] . '<br>';
}

出力結果はこうなります。

pc
smartphone
tablet

まずcount()で配列の数を取得してそれ以下なら繰り返すってことです。

連想配列

$count = count( $list2 );
for( $i = 0; $i < $count; ++$i ) {
    list( $key , $val ) = each( $list2 );
    echo $key . '-' . $val . '<br>';
}

出力結果はこうなります。

pc-パソコン
smartphone-スマホ
tablet-タブ

この場合$list2[$i]では値が取れません。$iの部分にはキーがこないといけないので。
そのためeach()を使って配列を順番に取り出していってます。

ただこのやり方はめんどくさいしforでやる意味もあまりないので連想配列を取り出すのにforは不向きということで。

while

値のみの配列

//方法1
$count = count( $list1 );
$i = 0; 
while( $i < $count ) {
    echo $list1[$i] . '<br>';
    ++$i;
}

//方法2
while( $val = current( $list1 ) ) {
    echo $val . '<br>';
    next( $list1 );
}

出力結果どちらもはこうなります。

pc
smartphone
tablet

方法1はやってることはforと一緒です。

方法2は配列を順番に取り出していくというものです。next()を書かないと無限ループになるのでご注意を!

方法2の注意

方法2でやる場合、配列の中の値に0,null,falseがあるとそこでループが終了してしまいます。

$list1 = array( 'pc' , 0 , 'tablet');
while( $val = current( $list1 ) ) {
    echo $val . '<br>';
    next( $list1 );
}

//結果
pc

ですので後述の↓each()を使った方法の方がいいです。

連想配列

while( list( $key , $val ) = each( $list2 ) ) {
    echo $key .'-'. $val . '<br>';
}

出力結果はこうなります。

pc-パソコン
smartphone-スマホ
tablet-タブ

forでやった取り方をもっと簡単にしたものですね。
whileは配列をループさせることができるのでforより使い勝手がいいです。

foreach

値のみの配列

foreach( $list1 as $val ) {
    echo $val . '<br>';
}

出力結果こうなります。

pc
smartphone
tablet

配列を順番に$valという変数に入れていくというものです。書き方的には一番簡素かと。

連想配列

foreach( $list2 as $key => $val ) {
    echo $key .'-'. $val . '<br>';
}

出力結果はこうなります。

pc-パソコン
smartphone-スマホ
tablet-タブ

foreachは通常の配列も連想配列もやりかたほとんど一緒なのでやっぱりforeach使いたくなりますねー。

注意事項

配列かどうか

配列を扱う場合、その変数が配列でないとエラーがでます。
ですのでis_array()で配列かどうかのチェックをしておくのがいいかと思います。

//配列じゃない変数をforeachでループさせる
$list3 = 'not_array';
foreach( $list3 as $key => $val ) {
    echo $key .'-'. $val . '<br>';
}

//こんなエラー
Invalid argument supplied for foreach()

is_array()で分岐。

$list3 = 'not_array';
if( is_array( $list3 )) {
    foreach( $list3 as $key => $val ) {
        echo $key .'-'. $val . '<br>';
    }
}

または(array)で配列に変換させてから処理を行う。

$list3 = 'not_array';
foreach( (array)$list3 as $key => $val ) {
    echo $key .'-'. $val . '<br>';
}

ただこの場合は結果が出力されますので、変数が配列の時のみ処理って場合はis_array()で。
変数が空(Null)か配列かの条件下では有効です。

//(array)$list3で出力するとこうなる
0-not_array
スポンサーリンク
おもしろかった・役に立った