5.2 Foreach

3110 ワード

PHPで1つの配列やオブジェクトを巡回するには、まず1つ目を見てみましょう.
//     
$array = ['a' => 'php', 'b' => 'asp', 'c' => 'jsp'];

//    abc
while($data = each($array)){
    echo $data[0];
}

//     ,    、   ***     
while($data = each($array)){
    echo "***";
    echo $data[0];
}
each():配列内のポインタが指すキー値を返し、配列形式で返し、ポインタを一歩前に移動します.each()関数の意味が分かると,前例で2回目になぜ出力されなかったのかが分かるが,この場合はreset()関数を用いることができる.reset():配列内のポインタを1番目のビットに移動します.
効果を確認します.
//     
$array = ['a' => 'php', 'b' => 'asp', 'c' => 'jsp'];

//    abc
while($data = each($array)){
    echo $data[0];
}

//     
reset($array);

//    abc
while($data = each($array)){
    echo $data[0];
}

機能と効果は実現されたが、PHPはこのような遍歴のためにforeachサイクル構造である方法を提供した.
// a:php b:asp c:jsp
foreach ($array as $key => $value) {
    echo $key . ':' . $value . ' ';
}
// php asp jsp
foreach ($array as $value) {
    echo $value . ' ';
}

//              
// a:php b:asp c:jsp
foreach ($array as $key => $value):
    echo $key . ':' . $value . ' ';
endforeach;

上記の例では、foreachループを複数回使用したが、reset()を使用してポインタを更新しなかった.これは、foreachが実行を開始すると、配列内部のポインタが自動的に最初の要素に移動するためである.
配列要素を遍歴しながら変更する場合は、キーまたは参照割り当てで行います.
//     
$array = ['a' => 'php', 'b' => 'asp', 'c' => 'jsp'];
//    a:PHP b:ASP c:JSP
foreach ($array as $key => &$value) {
    $value = strtoupper($value);
    echo $key . ':' . $value . ' ';
}

注意が必要なのは、foreachサイクルが完了した後も$value変数が存在し、unset()関数を使用して破棄することを推奨し、特に参照付与を使用する場合、うっかり配列の内容を変更する可能性が高いことです.foreachは、オブジェクトを巡回してコードを見ることもできます.
//     
class Example{
    private $one = "private";
    protected $two = "protected";
    public $three = "public";
    static $four = "static";
    public function getOne(){
        return $this->one;
    }
}
//    
$exam = new Example();
//    three : public 
foreach ($exam as $key => $value) {
    echo "$key : $value 
"; }

実際には、foreachも配列とオブジェクトを巡回するしかなく、他のタイプのデータに対して直接エラーを報告します.
多次元配列を扱う場合,list()関数と組み合わせて用いると手間が省ける.list():配列内の値を変数のセットに割り当てる
//     
$array = [
    ['php', 'mysql'],
    ['asp', 'sqlserver'],
    ['jsp', 'oracle'],
];
//      
foreach ($array as $data) {
    $key = $data[0];
    $value = $data[1];
    echo "$key : $value 
"; } // foreach ($array as list($key, $value)) { echo "$key : $value
"; }
list()関数のパラメータの数と配列内の要素の数は一致するべきで、少なくてもいいですが、多くてはいけません.そうしないと、エラーが発生します.不要なものはカンマで区切って空にすればいいです.
list($a, , $c) = ['aaa', 'bbb', 'ccc'];