ホームページ  >  記事  >  バックエンド開発  >  PHPのforeachの使い方と例を詳しく解説

PHPのforeachの使い方と例を詳しく解説

不言
不言オリジナル
2018-04-16 17:21:146806ブラウズ

この記事では、PHP での foreach の使用法と例を紹介し、興味のある友人は参照してください。

Foreach は PHP でよく使用されますが、foreach を使用するには配列を使用する必要があります。したがって、この記事では、配列と foreach について同時に説明します。

foreach には 2 つの構文があります:

最初の構文: 指定された配列ステートメントの array_expression 配列を走査します。ループを通過するたびに、現在のセルの値が $value に割り当てられ、配列内のポインターが 1 ステップ前に移動します (そのため、次のループで次のセルが取得されます)。

foreach (array_expression as $value)

2 番目: 上記と同様に、同時に、現在のユニットのキー名も各ループの変数 $key に割り当てられます。

rreee

以下、一つずつ説明していきましょう!

おすすめマニュアル: php完全独習マニュアル

1. 1次元の通常配列とforeach

まず、次のように1次元の配列を書きます。最初の foreach メソッドを使用して出力します。

foreach (array_expression as $key => $value)

最終結果は次のようになります:

$a = array('Tom','Mary','Peter','Jack');

2. 2 番目の foreach メソッドを使用して出力します。

foreach ($a as $value) {
  echo $value."<br/>";
}

最終結果は次のとおりです:

Tom
Mary
Peter
Jack

概要:

明らかに、$key がもう 1 つだけあることがわかり、この $key の値はシリアル番号 1、2、3、4 などです。

おすすめ関連記事:

1. $key => としての PHP foreach の 2 つの使用法
2.foreach ステートメント ループ配列の使用法を深く理解する
関連ビデオの推奨:
1.Dugu Jiijian (4)_PHP ビデオ チュートリアル
2.1 次元連想配列と foreach

一次元 連想配列は次のとおりです:

foreach ($a as $key => $value) {
  echo $key.&#39;,&#39;.$value."<br/>";
}
次のように記述することを好む人もいます:
0,Tom
1,Mary
2,Peter
3,Jack

1. 最初の foreach メソッドを使用して、上記と同じものを出力します。

$b = array(&#39;a&#39;=>&#39;Tom&#39;,&#39;b&#39;=>&#39;Mary&#39;,&#39;c&#39;=>&#39;Peter&#39;,&#39;d&#39;=>&#39;Jack&#39;);

最終結果は次のようになります:

$b = array(
  &#39;a&#39;=>&#39;Tom&#39;,
  &#39;b&#39;=>&#39;Mary&#39;,
  &#39;c&#39;=>&#39;Peter&#39;,
  &#39;d&#39;=>&#39;Jack&#39;
);

2. 2 番目の foreach メソッドを使用して出力します。

foreach ($b as $value) {
  echo $value."<br/>";
}

最終結果は次のとおりです:

Tom
Mary
Peter
Jack

概要:

明らかに、1 次元の連想配列では、$key は関連付けられたシリアル番号、つまり、対応する a、b、c、d です。

3. 2 次元の通常の配列 foreach で 2 次元の配列を走査するのは少し面倒です

。走査された値は配列であるため、配列に対してさまざまな操作を実行できます。

まず、次のような基本的な 2 次元配列を見てみましょう:

foreach ($b as $key => $value) {
  echo $key.&#39;,&#39;.$value."<br/>";
}

1. 最初の foreach メソッド:

a,Tom
b,Mary
c,Peter
d,Jack

を使用し、次の結果を取得します:

$c = array(
  array(&#39;1&#39;,&#39;Tom&#39;),
  array(&#39;2&#39;,&#39;Mary&#39;),
  array(&#39;3&#39;,&#39;Peter&#39;),
  array(&#39;4&#39;,&#39;Jack&#39;)
);

2. 2 番目の foreach メソッド:

foreach ($c as $value) {
  print_r($value);
  echo "<br/>";
}
を使用します。

以下の結果が得られます:

Array ( [0] => 11 [1] => Tom )
Array ( [0] => 22 [1] => Mary )
Array ( [0] => 33 [1] => Peter )
Array ( [0] => 44 [1] => Jack )

概要:

上記からわかるように、基本的な 2 次元配列の場合、$key は 0123 などのシリアル番号です。

4. 連想二次元配列と foreach

は、連想二次元配列が実際のプロジェクトでよく使用されることを示しています。なぜ?一般に、データベースから抽出されたデータは 2 次元配列に関連付けられます。2 次元配列の関連付けを学習すれば、実際の PHP の実践ではその大部分を習得したことになります。

次に、次のように、最初に関連付けられた 2 次元配列をリストします:

foreach ($c as $key => $value) {
  echo &#39;$key=&#39;.$key."<br/>";
  print_r($value);
  echo "<br/>";
}

1. 最初のメソッド コードを使用します:

$key=0
Array ( [0] => 11 [1] => Tom )
$key=1
Array ( [0] => 22 [1] => Mary )
$key=2
Array ( [0] => 33 [1] => Peter )
$key=3
Array ( [0] => 44 [1] => Jack )

結果は次のようになります:

$d = array(
  array(&#39;id&#39;=>&#39;11&#39;,&#39;name&#39;=>&#39;Tom&#39;),
  array(&#39;id&#39;=>&#39;22&#39;,&#39;name&#39;=>&#39;Mary&#39;),
  array(&#39;id&#39;=>&#39;33&#39;,&#39;name&#39;=>&#39;Peter&#39;),
  array(&#39;id&#39;=>&#39;44&#39;,&#39;name&#39;=>&#39;Jack&#39;)
);

明らかに、関連付けられているものと関連付けられていないものの違いは次のとおりです。関連付けられていない部分は 0/1 などですが、関連付けは特定の名前 ID/名前などを示します。

2. 2 番目のメソッドのコードを使用します:

foreach ($d as $value) {
  print_r($value);
  echo "<br/>";
}

得られる結果は次のとおりです:

Array ( [id] => 11 [name] => Tom )
Array ( [id] => 22 [name] => Mary )
Array ( [id] => 33 [name] => Peter )
Array ( [id] => 44 [name] => Jack )

概要: ここで $key は 0/1/2/3 のままです。

5. プロジェクトでの実際の適用

説明: プロジェクトでは配列に多くの変更があり、もちろん foreach が重要な役割を果たします。もちろん while や each などのメソッドも使用できますが、foreach が最も便利です。プロジェクトの一般的な実践方法について簡単に説明しましょう。

練習 1: 2 次元の連想配列を 1 次元の通常の配列に変換します

または、次のように 2 次元の連想配列の 4 番目のリストを作成します:

foreach ($d as $key => $value) {
  echo &#39;$key=&#39;.$key."<br/>";
  print_r($value);
  echo "<br/>";
}

ここで必要なのは、name 列の内容だけです。もちろん、次のメソッドを使用してそれを実現できます

$key=0
Array ( [id] => 11 [name] => Tom )
$key=1
Array ( [id] => 22 [name] => Mary )
$key=2
Array ( [id] => 33 [name] => Peter )
$key=3
Array ( [id] => 44 [name] => Jack )

しかし、場合によってはそれを 1 次元配列としてリストする必要があるため、次のメソッドがあります:

$d = array(
  array(&#39;id&#39;=>&#39;11&#39;,&#39;name&#39;=>&#39;Tom&#39;),
  array(&#39;id&#39;=>&#39;22&#39;,&#39;name&#39;=>&#39;Mary&#39;),
  array(&#39;id&#39;=>&#39;33&#39;,&#39;name&#39;=>&#39;Peter&#39;),
  array(&#39;id&#39;=>&#39;44&#39;,&#39;name&#39;=>&#39;Jack&#39;)
);

上記は、foreach に空の配列値を割り当てることによって取得されます。この空の配列は、値「新しい配列」と同じです。上記のコードの結果は次のようになります:

foreach ($d as $key => $value) {
  echo ($value[&#39;name&#39;]);
  echo "<br/>";
}

この配列は明らかに、次のような 1 次元の通常の配列です:

//获取name列作为一维数组
$nameArr = array(); //name列
foreach ($d as $key => $value) {
  $nameArr[] = $value[&#39;name&#39;];
}
print_r($nameArr);

さて、2 次元の連想配列を 1 次元の通常の配列に変換する方法は以上です。 !

実践 2: 2 レベル分類と無限レベル分類

データベースから取り出すデータは 2 次元配列であり、2 次元連想配列であることは明らかです。では、親カテゴリを抽出するにはどうすればよいでしょうか?親カテゴリに対応するサブカテゴリを取得するにはどうすればよいですか?

首先要说明的是:几乎所有的分类都是一个数据库模式,因此我们十分有必要了解它的结构,还有怎么取出对应的数据!

对于二级分类,为了说明方便,我从网上找一个比较好说明的例子,那就是“新闻分类“!

好了,废话不多说,开始正题!我们先写一个数组。

//从数据库中取出的分类数据
$original_array = array(
  array(&#39;id&#39; => 1,&#39;pid&#39; => 0,&#39;name&#39; => &#39;新闻分类&#39;),
  array(&#39;id&#39; => 2,&#39;pid&#39; => 0,&#39;name&#39; => &#39;最新公告&#39;),
  array(&#39;id&#39; => 3,&#39;pid&#39; => 1,&#39;name&#39; => &#39;国内新闻&#39;),
  array(&#39;id&#39; => 4,&#39;pid&#39; => 1,&#39;name&#39; => &#39;国际新闻&#39;),
  array(&#39;id&#39; => 5,&#39;pid&#39; => 0,&#39;name&#39; => &#39;图片分类&#39;),
  array(&#39;id&#39; => 6,&#39;pid&#39; => 5,&#39;name&#39; => &#39;新闻图片&#39;),
  array(&#39;id&#39; => 7,&#39;pid&#39; => 5,&#39;name&#39; => &#39;其它图片&#39;)
);

同时,数据库是这个样子的。

说明:数据库的分类就是这个样子的!取出来的数组也是这个样子的!一般这样子的!

//从数据库中取出的分类数据
$original_array = array(
  array(
    &#39;id&#39; => 1,
    &#39;pid&#39; => 0,
    &#39;name&#39; => &#39;新闻分类&#39;
  ),
  array(
    &#39;id&#39; => 2,
    &#39;pid&#39; => 0,
    &#39;name&#39; => &#39;最新公告&#39;
  ),
  array(
    &#39;id&#39; => 3,
    &#39;pid&#39; => 1,
    &#39;name&#39; => &#39;国内新闻&#39;
  ),
  array(
    &#39;id&#39; => 4,
    &#39;pid&#39; => 1,
    &#39;name&#39; => &#39;国际新闻&#39;
  ),
  array(
    &#39;id&#39; => 5,
    &#39;pid&#39; => 0,
    &#39;name&#39; => &#39;图片分类&#39;
  ),
  array(
    &#39;id&#39; => 6,
    &#39;pid&#39; => 5,
    &#39;name&#39; => &#39;新闻图片&#39;
  ),
  array(
    &#39;id&#39; => 7,
    &#39;pid&#39; => 5,
    &#39;name&#39; => &#39;其它图片&#39;
  )
);

那么首先我们得知道我们想要的结果是什么样子呢?这一点:我们必要知道!(以前我对这方面了解比较不深,又常用开源程序,因此导致我不怎么会写这方面了)

我们最终想要的结果是这样子的!(不怕大家笑话,这一点我请一个朋友帮的忙才解决的!)

//整理后的分类数据
$output_array = array(
  array(
    &#39;id&#39; => 1,
    &#39;pid&#39; => 0,
    &#39;name&#39; => &#39;新闻分类&#39;,
    &#39;children&#39; => array(
      array(
        &#39;id&#39; => 3,
        &#39;pid&#39; => 1,
        &#39;name&#39; => &#39;国内新闻&#39;
      ),
      array(
        &#39;id&#39; => 4,
        &#39;pid&#39; => 1,
        &#39;name&#39; => &#39;国际新闻&#39;
      ),
    ),
  ),
  array(
    &#39;id&#39; => 2,
    &#39;pid&#39; => 0,
    &#39;name&#39; => &#39;最新公告&#39;,
  ),
  array(
    &#39;id&#39; => 5,
    &#39;pid&#39; => 0,
    &#39;name&#39; => &#39;图片分类&#39;,
    &#39;children&#39; => array(
      array(
        &#39;id&#39; => 6,
        &#39;pid&#39; => 5,
        &#39;name&#39; => &#39;新闻图片&#39;
      ),
      array(
        &#39;id&#39; => 7,
        &#39;pid&#39; => 5,
        &#39;name&#39; => &#39;其它图片&#39;
      ),
    ),
  ),
);

很明显,这里数组多了一个字段,就是 children!

那么,怎么 从 $original_array 变为 $output_array呢?这里有我一个朋友做的函数,当然也用到 foreach!

函数如下:

//整理函数
/**
 * 生成无限级树算法
 * @author Baiyu 2014-04-01
 * @param array $arr        输入数组
 * @param number $pid        根级的pid
 * @param string $column_name    列名,id|pid父id的名字|children子数组的键名
 * @return array $ret
 */
function make_tree($arr, $pid = 0, $column_name = &#39;id|pid|children&#39;) {
  list($idname, $pidname, $cldname) = explode(&#39;|&#39;, $column_name);
  $ret = array();
  foreach ($arr as $k => $v) {
    if ($v [$pidname] == $pid) {
      $tmp = $arr [$k];
      unset($arr [$k]);
      $tmp [$cldname] = make_tree($arr, $v [$idname], $column_name);
      $ret [] = $tmp;
    }
  }
  return $ret;
}

那们怎么使用呢?

//整理函数的使用
$output_array = make_tree($original_array);

完整使用方法如下:

$output_array =make_tree($arr, 0, &#39;id|pid|children&#39;)

函数之后,我们这样调用就得到了一级分类与二级分类!

foreach ($output_array as $key => $value) {
  echo &#39;<h2>&#39;.$value[&#39;name&#39;].&#39;</h2>&#39;;
  foreach ($value[&#39;children&#39;] as $key => $value) {
    echo $value[&#39;name&#39;].&#39;,&#39;;
}

结果如下:

附:$output_array 这个数组,我们使用print_r,就可以得到如下的结果!

Array
(
  [0] => Array
    (
      [id] => 1
      [pid] => 0
      [name] => 新闻分类
      [children] => Array
        (
          [0] => Array
            (
              [id] => 3
              [pid] => 1
              [name] => 国内新闻
              [children] => Array
                (
                )

            )

          [1] => Array
            (
              [id] => 4
              [pid] => 1
              [name] => 国际新闻
              [children] => Array
                (
                )

            )

        )

    )

  [1] => Array
    (
      [id] => 2
      [pid] => 0
      [name] => 最新公告
      [children] => Array
        (
        )

    )

  [2] => Array
    (
      [id] => 5
      [pid] => 0
      [name] => 图片分类
      [children] => Array
        (
          [0] => Array
            (
              [id] => 6
              [pid] => 5
              [name] => 新闻图片
              [children] => Array
                (
                )

            )

          [1] => Array
            (
              [id] => 7
              [pid] => 5
              [name] => 其它图片
              [children] => Array
                (
                )

            )

        )

    )

)

相关推荐:

php在foreach循环后留下数组的引用问题

php中foreach使用&引用后的异常处理

以上がPHPのforeachの使い方と例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。