ホームページ >バックエンド開発 >PHPの問題 >php foreachの使い方を詳しく解説

php foreachの使い方を詳しく解説

藏色散人
藏色散人オリジナル
2020-11-19 10:00:189561ブラウズ

php foreach の使用法: 1. 構文「foreach (array_expression as $value)」で使用します; 2. 構文「foreach (array_expression as $key => $value)」で使用します。

php foreachの使い方を詳しく解説

推奨: 「PHP ビデオ チュートリアル

PHP での foreach の使用法と例

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

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

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

foreach (array_expression as $value)

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

foreach (array_expression as $key => $value)

では、一つずつ説明していきましょう!

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

最初に、次のように 1 次元の配列を作成します:

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

1. 使用します。出力する各メソッドの最初の 1 つ。

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

最終結果は:

Tom
Mary
Peter
Jack

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

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

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

0,Tom
1,Mary
2,Peter
3,Jack

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

2. 1 次元の連想配列と foreach

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

$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;
);

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

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

最終結果は:

Tom
Mary
Peter
Jack

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

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

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

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

要約: 明らかに、1 次元の連想配列では、$key は関連付けられたシリアル番号、つまり、対応するシリアル番号です。あいうえお。

3. 通常の 2 次元配列と foreach

2 次元配列を走査する場合、少し面倒になります。走査された値は配列であるため、配列であるため、配列に対してさまざまな操作を実行できます。

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

$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;)
);

1. 最初の 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。2 番目の foreach メソッドを使用します:

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

は次の結果を取得します:

$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 )

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

4. 連想二次元配列とforeach

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

次に、次のように、最初に関連する 2 次元配列をリストします:

$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;)
);

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

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 )

明らかに、関連付けと非関連付けの違いは次のとおりです。非関連付けでは先頭に 0/1 などが付きますが、関連付けでは特定の名前 id/ が表示されます。名前など

2. 2 番目の方法を使用したコード:

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

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

$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 )

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

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

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

実践 1: 2 次元の連想配列を 1 次元の通常の配列に変換する

引き続き 4 番目の 2 次元の連想配列のリストは次のとおりです:

$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;)
);

ここで必要な列は 1 つだけです: name もちろん、次のメソッドを使用して実装できます。

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);

上記では、空の配列値を代入することにより、この空の配列が値と等しく、新しい配列を取得します。上記のコードの結果は次のようになります。

Array
(
  [0] => Tom
  [1] => Mary
  [2] => Peter
  [3] => Jack
)

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

$d = array(&#39;Tom&#39;,&#39;Mary&#39;,&#39;Peter&#39;,&#39;Jack&#39;);

よし、2次元を変換してみよう 以上で、連想配列を1次元の通常配列に変換することができました。

実践 2: 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 中国語 Web サイトの他の関連記事を参照してください。

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