Foreach は PHP でよく使用されますが、foreach を使用するには配列を使用する必要があります。したがって、この記事では、配列と foreach について同時に説明します。
foreach には 2 つの構文があります:
最初の構文: 指定された配列ステートメントの array_expression 配列を走査します。ループを通過するたびに、現在のセルの値が $value に割り当てられ、配列内のポインターが 1 ステップ前に移動します (そのため、次のループで次のセルが取得されます)。
foreach (array_expression as $value) statement
2 番目: 上記と同様に、同時に、現在のユニットのキー名も各ループの変数 $key に割り当てられます。
rreee以下で一つずつ説明していきましょう!
1. 1 次元の通常の配列と foreach
まず、次のように 1 次元の配列を作成します。
foreach (array_expression as $key => $value) statement
1. 最初の foreach メソッドを使用して出力します。
$a = array('Tom','Mary','Peter','Jack');
最終結果は次のようになります:
foreach ($a as $value) { echo $value."<br/>"; }
2. 2 番目の foreach メソッドを使用して出力します。
Tom Mary Peter Jack
最終結果は次のとおりです:
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.','.$value."<br/>"; }
次のように記述することを好む人もいます。
$b = array('a'=>'Tom','b'=>'Mary','c'=>'Peter','d'=>'Jack');
1. 最初の foreach メソッドを使用します。上記と同じように出力します。
$b = array( 'a'=>'Tom', 'b'=>'Mary', 'c'=>'Peter', 'd'=>'Jack' );
最終結果は次のようになります:
foreach ($b as $value) { echo $value."<br/>"; }
2. 2 番目の foreach メソッドを使用して出力します。
Tom Mary Peter Jack
最終結果は
foreach ($b as $key => $value) { echo $key.','.$value."<br/>"; }
要約: 明らかに、1 次元の連想配列では、$key は関連付けられたシリアル番号、つまり、対応する a、b、c、d です。
3. 2 次元の通常の配列と foreach
2 次元の配列を走査する場合、少し面倒になります。なぜでしょうか。走査された値は配列であるため、配列に対してさまざまな操作を実行できます。
まず、次のような基本的な 2 次元配列を見てみましょう
a,Tom b,Mary c,Peter d,Jack
1。最初の foreach メソッド:
$c = array( array('1','Tom'), array('2','Mary'), array('3','Peter'), array('4','Jack') );
を使用し、次の結果を取得します:
foreach ($c as $value) { print_r($value); echo "<br/>"; }
2。次の結果が得られます:
Array ( [0] => 11 [1] => Tom ) Array ( [0] => 22 [1] => Mary ) Array ( [0] => 33 [1] => Peter ) Array ( [0] => 44 [1] => Jack )
概要: 上記からわかるように、基本的な 2 次元配列の場合、$key は 0123 などのシリアル番号です。
4. 連想 2 次元配列と foreach
は、連想 2 次元配列が実際のプロジェクトでよく使用されることを示しています。なぜ?一般に、データベースから抽出されたデータは 2 次元配列に関連付けられます。2 次元配列の関連付けを学習すれば、実際の PHP の実践ではその大部分を習得したことになります。
次に、次のように、最初に関連する 2 次元配列をリストします:
foreach ($c as $key => $value) { echo '$key='.$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('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 $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:将二维关联数组变为一维普通数组
还是第四列出关联二维数组,如下:
$d = array( array('id'=>'11','name'=>'Tom'), array('id'=>'22','name'=>'Mary'), array('id'=>'33','name'=>'Peter'), array('id'=>'44','name'=>'Jack') );
现在我们只要 name 一列的内容,当然我们可以用以下的方法来实现,
foreach ($d as $key => $value) { echo ($value['name']); echo "<br/>"; }
但有时候我们不得不将之列为一个一维数组,于是我们就有了以下的方法:
//获取name列作为一维数组$nameArr = array(); //name列foreach ($d as $key => $value) { $nameArr[] = $value['name']; } print_r($nameArr);
以上通过赋空数组值,foreach 这个空数组等于我们的值,就得到了一个新的数组!以上代码的结果如下:
Array( [0] => Tom [1] => Mary [2] => Peter [3] => Jack )
这个数组明显是:一维普通数组,如下:
$d = array('Tom','Mary','Peter','Jack');
好了,将二维关联数组变为一维普通数组就写到了这里!
实战2 :二级分类以及无限级分类
很明显,我们从数据库中取出来的数据就是一个二维数组,而且是二维关联数组。那么,我们怎么取出父分类?怎么取出对应父分类的子分类呢?
首先要说明的是:几乎所有的分类都是一个数据库模式,因此我们十分有必要了解它的结构,还有怎么取出对应的数据!
对于二级分类,为了说明方便,我从网上找一个比较好说明的例子,那就是“新闻分类“!
好了,废话不多说,开始正题!我们先写一个数组。
//从数据库中取出的分类数据 $original_array = array( array('id' => 1,'pid' => 0,'name' => '新闻分类'), array('id' => 2,'pid' => 0,'name' => '最新公告'), array('id' => 3,'pid' => 1,'name' => '国内新闻'), array('id' => 4,'pid' => 1,'name' => '国际新闻'), array('id' => 5,'pid' => 0,'name' => '图片分类'), array('id' => 6,'pid' => 5,'name' => '新闻图片'), array('id' => 7,'pid' => 5,'name' => '其它图片') );
同时,数据库是这个样子的。
说明:数据库的分类就是这个样子的!取出来的数组也是这个样子的!一般这样子的!
//从数据库中取出的分类数据 $original_array = array( array( 'id' => 1, 'pid' => 0, 'name' => '新闻分类' ), array( 'id' => 2, 'pid' => 0, 'name' => '最新公告' ), array( 'id' => 3, 'pid' => 1, 'name' => '国内新闻' ), array( 'id' => 4, 'pid' => 1, 'name' => '国际新闻' ), array( 'id' => 5, 'pid' => 0, 'name' => '图片分类' ), array( 'id' => 6, 'pid' => 5, 'name' => '新闻图片' ), array( 'id' => 7, 'pid' => 5, 'name' => '其它图片' ) );
那么首先我们得知道我们想要的结果是什么样子呢?这一点:我们必要知道!(以前我对这方面了解比较不深,又常用开源程序,因此导致我不怎么会写这方面了)
我们最终想要的结果是这样子的!(不怕大家笑话,这一点我请一个朋友帮的忙才解决的!)
//整理后的分类数据 $output_array = array( array( 'id' => 1, 'pid' => 0, 'name' => '新闻分类', 'children' => array( array( 'id' => 3, 'pid' => 1, 'name' => '国内新闻' ), array( 'id' => 4, 'pid' => 1, 'name' => '国际新闻' ), ), ), array( 'id' => 2, 'pid' => 0, 'name' => '最新公告', ), array( 'id' => 5, 'pid' => 0, 'name' => '图片分类', 'children' => array( array( 'id' => 6, 'pid' => 5, 'name' => '新闻图片' ), array( 'id' => 7, 'pid' => 5, 'name' => '其它图片' ), ), ), );
很明显,这里数组多了一个字段,就是 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 = 'id|pid|children') { list($idname, $pidname, $cldname) = explode('|', $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, 'id|pid|children')
函数之后,我们这样调用就得到了一级分类与二级分类!
foreach ($output_array as $key => $value) { echo '<h2 id="value-name">'.$value['name'].'</h2>'; foreach ($value['children'] as $key => $value) { echo $value['name'].','; }
结果如下:
附:$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 ( ) ) ) ) )

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック









