5.2 Foreach
3110 ワード
PHPで1つの配列やオブジェクトを巡回するには、まず1つ目を見てみましょう.
効果を確認します.
機能と効果は実現されたが、PHPはこのような遍歴のために
上記の例では、
配列要素を遍歴しながら変更する場合は、キーまたは参照割り当てで行います.
注意が必要なのは、
実際には、
多次元配列を扱う場合,
//
$array = ['a' => 'php', 'b' => 'asp', 'c' => 'jsp'];
// abc
while($data = each($array)){
echo $data[0];
}
// , 、 ***
while($data = each($array)){
echo "***";
echo $data[0];
}
each()
:配列内のポインタが指すキー値を返し、配列形式で返し、ポインタを一歩前に移動します.each()
関数の意味が分かると,前例で2回目になぜ出力されなかったのかが分かるが,この場合はreset()
関数を用いることができる.reset()
:配列内のポインタを1番目のビットに移動します.効果を確認します.
//
$array = ['a' => 'php', 'b' => 'asp', 'c' => 'jsp'];
// abc
while($data = each($array)){
echo $data[0];
}
//
reset($array);
// abc
while($data = each($array)){
echo $data[0];
}
機能と効果は実現されたが、PHPはこのような遍歴のために
foreach
サイクル構造である方法を提供した.// a:php b:asp c:jsp
foreach ($array as $key => $value) {
echo $key . ':' . $value . ' ';
}
// php asp jsp
foreach ($array as $value) {
echo $value . ' ';
}
//
// a:php b:asp c:jsp
foreach ($array as $key => $value):
echo $key . ':' . $value . ' ';
endforeach;
上記の例では、
foreach
ループを複数回使用したが、reset()
を使用してポインタを更新しなかった.これは、foreach
が実行を開始すると、配列内部のポインタが自動的に最初の要素に移動するためである.配列要素を遍歴しながら変更する場合は、キーまたは参照割り当てで行います.
//
$array = ['a' => 'php', 'b' => 'asp', 'c' => 'jsp'];
// a:PHP b:ASP c:JSP
foreach ($array as $key => &$value) {
$value = strtoupper($value);
echo $key . ':' . $value . ' ';
}
注意が必要なのは、
foreach
サイクルが完了した後も$value
変数が存在し、unset()
関数を使用して破棄することを推奨し、特に参照付与を使用する場合、うっかり配列の内容を変更する可能性が高いことです.foreach
は、オブジェクトを巡回してコードを見ることもできます.//
class Example{
private $one = "private";
protected $two = "protected";
public $three = "public";
static $four = "static";
public function getOne(){
return $this->one;
}
}
//
$exam = new Example();
// three : public
foreach ($exam as $key => $value) {
echo "$key : $value
";
}
実際には、
foreach
も配列とオブジェクトを巡回するしかなく、他のタイプのデータに対して直接エラーを報告します.多次元配列を扱う場合,
list()
関数と組み合わせて用いると手間が省ける.list()
:配列内の値を変数のセットに割り当てる//
$array = [
['php', 'mysql'],
['asp', 'sqlserver'],
['jsp', 'oracle'],
];
//
foreach ($array as $data) {
$key = $data[0];
$value = $data[1];
echo "$key : $value
";
}
//
foreach ($array as list($key, $value)) {
echo "$key : $value
";
}
list()
関数のパラメータの数と配列内の要素の数は一致するべきで、少なくてもいいですが、多くてはいけません.そうしないと、エラーが発生します.不要なものはカンマで区切って空にすればいいです.list($a, , $c) = ['aaa', 'bbb', 'ccc'];