PHPでのforeachの使い方

墨辰丷
リリース: 2023-03-28 16:32:02
オリジナル
153885 人が閲覧しました

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

関連する推奨事項: php完全独習マニュアルPHPオンライントレーニングコース

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

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

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

foreach (array_expression as $value)
ログイン後にコピー

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

rreee

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

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

まず、次のように 1 次元の配列を作成します。

foreach (array_expression as $key => $value)
ログイン後にコピー

1. 最初の foreach メソッドを使用して出力します。

$a = array('Tom','Mary','Peter','Jack');
ログイン後にコピー

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

Tom
Mary
Peter
Jack

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

foreach ($a as $value) {
  echo $value."<br/>";
}
ログイン後にコピー

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

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

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

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

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

foreach ($a as $key => $value) {
  echo $key.&#39;,&#39;.$value."<br/>";
}
ログイン後にコピー

次のように記述することを好む人もいます。最初の 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;);
ログイン後にコピー

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

Tom

Mary

Peter
Jack


2. 2 番目の 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;
);
ログイン後にコピー

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

a、Tom

b、Mary

c、Peter
d、Jack


概要:

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

推奨ビデオチュートリアル:
章ビデオチュートリアル「
foreachループを使用して走査:インデックスと連想配列
ソースコース「Dugu Jiijian (4)_PHPビデオチュートリアル
3次元と2次元の通常の配列と foreach

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

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

foreach ($b as $value) {
  echo $value."<br/>";
}
ログイン後にコピー

1。最初の foreach メソッド:

foreach ($b as $key => $value) {
  echo $key.&#39;,&#39;.$value."<br/>";
}
ログイン後にコピー

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

Array ( [0] => 11 [1] = > トム )

配列 ( [0] => 22 [1] => メアリー )

配列 ( [0] => 33 [1] => ピーター )
配列 ( [0] => 44 [1] => Jack )


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

$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;)
);
ログイン後にコピー

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

$key=0

Array ( [0] => 11 [1] = > ; トム )

$key=1
配列 ( [0] => 22 [1] => メアリー )
$key=2
配列 ( [0] => 33 [1] => ピーター )
$key=3
Array ([0] => 44 [1] => Jack )


概要:

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

4. 連想二次元配列と foreach

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

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

foreach ($c as $value) {
  print_r($value);
  echo "<br/>";
}
ログイン後にコピー

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

foreach ($c as $key => $value) {
  echo &#39;$key=&#39;.$key."<br/>";
  print_r($value);
  echo "<br/>";
}
ログイン後にコピー

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

Array ( [id] => 11 [name] => トム )

配列 ( [id] => 22 [名前] => メアリー )

配列 ( [id] => 33 [名前] => ピーター )
配列 ( [id] => 44 [name ] => Jack )


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

2. 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;)
);
ログイン後にコピー
ログイン後にコピー

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

$key=0

Array ( [id] => 11 [name] => Tom )

$key=1
配列 ( [id] => 22 [名前] => メアリー )
$key=2
配列 ( [id] => 33 [名前] => ピーター )
$key=3
配列 ( [ id ] => 44 [name] => Jack )


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

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

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

实战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;)
);
ログイン後にコピー
ログイン後にコピー

现在我们只要 name 一列的内容,当然我们可以用以下的方法来实现,

foreach ($d as $key => $value) {
  echo ($value[&#39;name&#39;]);
  echo "<br/>";
}
ログイン後にコピー

但有时候我们不得不将之列为一个一维数组,于是我们就有了以下的方法:

//获取name列作为一维数组
$nameArr = array(); //name列
foreach ($d as $key => $value) {
  $nameArr[] = $value[&#39;name&#39;];
}
print_r($nameArr);
ログイン後にコピー

以上通过赋空数组值,foreach 这个空数组等于我们的值,就得到了一个新的数组!以上代码的结果如下:

Array
(
  [0] => Tom
  [1] => Mary
  [2] => Peter
  [3] => Jack
)
ログイン後にコピー

这个数组明显是:一维普通数组,如下:

$d = array(&#39;Tom&#39;,&#39;Mary&#39;,&#39;Peter&#39;,&#39;Jack&#39;);
ログイン後にコピー

好了,将二维关联数组变为一维普通数组就写到了这里!

实战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中文网。

相关推荐:

PHP+ajax实现的省市联动功能

php命名空间使用详解

php+mysql实现广告点击统计(附代码)

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート