Secura Vita

Category: Works , PHP
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

おもしろかった・役に立った
▼ブログランキング参加中!クリック!▼
  • ブログランキング・にほんブログ村へ

Comment

  1. 通りすがり より:

    for文の増分は、$i++にしないといけないので

    for ($i = 1; $i <= 10; $i++) {
    echo $i;
    }

    のように表さないといけません。
    間違えてますよ。

    1. あつお より:

      別にいけないことはないでしよ。

通りすがり へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ソースコードを記入する場合は [code]~[/code] でくくってください。
[code]
echo "Hello World";
[/code]

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください