検索
ホームページバックエンド開発PHPチュートリアル$key => $value としての PHP foreach の 2 つの使用法

この記事では、$key => $value として PHP の foreach の 2 つの使用法を紹介します。これは、必要な友達に参照してもらえるように共有します。 1. foreach 構文の紹介。

PHP 4 以降には、配列を走査するための便利な方法である foreach 構造が含まれています。 foreach は配列でのみ使用でき、他のデータ型または初期化されていない変数で使用しようとするとエラーが発生します。構文は 2 つあり、2 番目の構文は最初の構文を拡張したものです。

foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement
最初の形式は、指定された array_expression 配列を反復処理します。ループを通過するたびに、現在のセルの値が $value に割り当てられ、配列内のポインターが 1 ステップ前に移動します (そのため、次のループで次のセルが取得されます)。

2 番目の形式は同じことを行います
が、現在のセルの値に加えて、各ループでキー値も変数 $key

に割り当てられる点が異なります。以下のコードを見てください:

$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
echo $key."=>".$value."\n";
}
结果如下:
1=>111
2=>222
3=>333

ここでのキー値は配列の添字として理解できます。配列要素 a[2] の添字は 2 です。

foreach の実行が開始されると、配列内のポインターが自動的にポイントされます。最初のユニットへ。これは、foreach ループの前にreset()を呼び出す必要がないことを意味します。 while ループにはリセットが必要です。以下の 2 つのコードはまったく同じように機能します。

1. while ループを使用します

$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}

2. foreach を使用します

foreach ($arr as $value) {
echo "Value: $value<br>\n";
}

また、foreach は配列自体ではなく、指定された配列のコピーを操作することに注意してください。したがって、 each() を構築しても、元の配列ポインタは変更されず、配列単位の値は影響を受けません。

foreach は、「@」を使用してエラー メッセージを抑制する機能をサポートしていません。

2. PHP foreach の概要

1. foreach での参照の使用。 通常、foreach($arr as $value)の$arrと$valueはコピーであり、外部要因の影響を受けません、つまり

$arr = array(0,1,2,3,4,5);
foreach($arr as $value){
$arr = array();
echo $value;
}
结果是:12345

しかし、$arrが参照である場合、状況は異なります。問題を説明すると

$arr = array(0,1,2,3,4,5);
$arr = &$arr;
foreach($arr as $value){
$arr = array();
echo $value;
}
结果是: 0

これは、ループで使用される $arr が、コピーを作成するのではなく、元のデータを直接ポイントしているためです。

$value が参照であり、$arr が参照ではない場合、結果は同じです。 同様に、$value はコピーではなく元のデータを指します

$arr = array(0,1,2,3,4,5);
foreach($arr as &$value){
$arr = array();
echo $value;
}
结果是: 0

別の特殊な状況、つまり $arr がグローバルとして定義されている 変数の場合、$arr も参照になります

global $arr;
$arr = array(0,1,2,3,4,5);
foreach($arr as $value){
$arr = array();
echo $value;
}
结果是: 0

2. 配列を 2 回ループする場合、このように記述してはなりません

foreach($arr as &$value){}
foreach($arr as $value){}

これにより、2 回目のループの結果が正しくなくなります(おそらく PHP のバグです)。代わりに以下を使用できます:

//solution 1
foreach($arr as &$value){}
unset($value);
foreach($arr as $value){}
//solution 2
foreach($arr as &$value){}
foreach($arr as &$value){}
//solution 3
foreach($arr as &$value){}
$arr2 = $arr;
foreach($arr2 as $value){}

関連する推奨事項:

PHP での foreach の使用法と例の詳細な説明

以上が$key => $value としての PHP foreach の 2 つの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Java ArrayList遍历时使用foreach和iterator删除元素的区别是什么?Java ArrayList遍历时使用foreach和iterator删除元素的区别是什么?Apr 27, 2023 pm 03:40 PM

一、Iterator和foreach的区别多态差别(foreach底层就是Iterator)Iterator是一个接口类型,他不关心集合或者数组的类型;for和foreach都需要先知道集合的类型,甚至是集合内元素的类型;1.为啥说foreach底层就是Iterator编写的代码:反编译代码:二、foreach与iterator时remove的区别先来看阿里java开发手册但1的时候不会报错,2的时候就会报错(java.util.ConcurrentModificationException)首

php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php如何判断foreach循环到第几个php如何判断foreach循环到第几个Jul 10, 2023 pm 02:18 PM

​php判断foreach循环到第几个的步骤:1、创建一个“$fruits”的数组;2、创建一个计数器变量“$counter”初始值为0;3、使用“foreach”循环遍历数组,并在循环体中增加计数器变量的值,再输出每个元素和它们的索引;4、在“foreach”循环体外输出计数器变量的值,以确认循环到了第几个元素。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php怎么设置implode没有分隔符php怎么设置implode没有分隔符Apr 18, 2022 pm 05:39 PM

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境