ホームページ  >  記事  >  バックエンド開発  >  PHP配列トラバーサル知識まとめ(トラバーサル方法、配列ポインタ操作関数、配列トラバーサル速度テストなど)_PHPチュートリアル

PHP配列トラバーサル知識まとめ(トラバーサル方法、配列ポインタ操作関数、配列トラバーサル速度テストなど)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:26:391168ブラウズ

1. 配列トラバーサルの 3 つの方法の紹介

1.foreach()

foreach() は、配列内のデータを走査するための最も単純かつ効果的なメソッドです。

#例1:

コードをコピーします コードは次のとおりです:

$colors= array('red','blue','green',' yellow');
foreach ($colorsas$color){
echo "$color は好きですか?
";
}
?>

表示結果:

赤は好きですか? 青は好きですか? 緑は好きですか? 黄色は好きですか?


2.ながら()

while() は通常、list() および each() と組み合わせて使用​​されます。

#例2:


コードをコピーします

コードは次のとおりです: $colors= array('red','blue','green',' yellow');
while(list($key,$val)= each($colors)) {
echo "$val のその他のリスト
";
}
?>

表示結果:
その他のレッドリスト
その他のブルーリスト その他のグリーン一覧

その他のイエロー一覧


3. for()

#例3:


コードをコピーします

コードは次のとおりです: $arr= 配列 ("0"=> "ゼロ","1"=>​​ "1","2"=> "2");
for ($i= 0;$i $str= $arr[$i];
echo "番号は $str.
";
}
?>

表示結果:
その数はゼロです
番号は 1 です。 数は2です


2. 配列ポインタ操作関数の紹介

キー()

混合キー(配列入力_配列) key() 関数は、input_array の現在のポインター位置にあるキー要素を返します。

#例4

コードをコピーします

コードは次のとおりです: $capitals= array("オハイオ"=> "コロンバス","トワ"=> "デモイン","アリゾナ"=> "フェニックス");
echo "

これらの州の首都の名前を教えていただけますか?

";
while($key= key($capitals)) {
echo $key."
";
次($capitals);
//各 key() 呼び出しではポインタは進みません。これには next() 関数を使用します
}
?>


表示結果:
これらの州の首都の名前を教えてください オハイオ州

とわ

アリゾナ



リセット()

混合リセット(配列入力_配列) reset() 関数は、input_array ポインタを配列の先頭に戻すために使用されます。この関数は、スクリプト内で同じ配列を複数回表示または処理する必要がある場合によく使用されます。また、この関数はソートの最後によく使用されます。

#example5 - #example1 にコードを追加します

コードをコピーします

コードは次のとおりです: $colors= array('red','blue','green',' yellow');
foreach ($colorsas$color){
echo "$color は好きですか?
";
}
リセット($colors);
while(list($key,$val)= each($colors)) {
echo "$key=> $val
";
}
?>



表示結果:
赤は好きですか? 青は好きですか? 緑は好きですか? 黄色は好きですか? 0 => 赤 1 => 青

2 => 緑色

3 => 黄色


注: ある配列を別の配列に代入すると、元の配列ポインターがリセットされるため、上記の例で $colors をループ内の別の変数に代入すると、無限ループが発生します。
たとえば、$s1 = $colors; が while ループに追加され、コードが再度実行されると、ブラウザーは結果を無限に表示します。


それぞれ()

配列それぞれ(配列入力_配列)


each() 関数は、入力配列の現在のキーと値のペアを返し、ポインターを 1 位置進めます。返された配列には 4 つのキーが含まれ、キー 0 とキーにはキー名が含まれ、キー 1 と値には対応するデータが含まれます。 each() が実行される前にポインタが配列の末尾にある場合は、FALSE が返されます。

#例6

コードをコピーします

コードは次のとおりです:


$capitals= array("オハイオ"=> "コロンバス","トワ"=> "デモイン","アリゾナ"=> "フェニックス"); $s1= each($capitals); print_r($s1); ?>

表示結果:

配列 ( [1] => コロンバス [値] => コロンバス [0] => オハイオ [キー] => オハイオ )


現在()、次()、前()、終了()

混合電流(配列ターゲット_配列)

current() 関数は、target_array 配列の現在のポインター位置にある配列値を返します。 next()、prev()、end() 関数とは異なり、current() はポインタを移動しません。
next() 関数は、現在の配列ポインターのすぐ隣にある配列値を返します。
prev() 関数は、現在のポインターの前の位置にある配列値を返します。ポインターが元々配列の最初の位置にある場合は、FALSE を返します。
end() 関数は、ポインタを target_array の最後の位置に移動し、最後の要素を返します。


#例7

コードをコピーします コードは次のとおりです:

$fruits= array("リンゴ","オレンジ","バナナ");
$fruit= current($fruits) //「リンゴ」を返します
echo $fruit."
";
$fruit= next($fruits) //「オレンジ」を返します
echo $fruit."
";
$fruit= prev($fruits) //「リンゴ」を返します
echo $fruit."
";
$fruit= end($fruits) //「バナナ」を返します
echo $fruit."
";
?>

表示結果:

リンゴ
オレンジ
リンゴ
バナナ

3. 配列を移動する 3 つの速度をテストします

一般に、配列を走査するには、for、while、foreach の 3 つのメソッドがあります。その中で最もシンプルで便利なのは foreach です。まず、50,000 個の添字を持つ 1 次元配列を走査するのにかかる時間をテストしてみましょう。

テスト環境:
インテル Core Due2 2GHz
2GB 1067MHz DDR3
Mac OS X 10.5.7
アパッチ 2.0.59
MySQL 5.0.41
PHP 5.2.6


#例8

コードをコピーします コードは次のとおりです:

$arr= 配列();
for($i= 0; $i $arr[]= $i*rand(1000,9999);
}
関数 GetRunTime()
{
list($usec,$sec)=explode(" ",microtime());
return ((float)$usec+(float)$sec);
}
#####################################
$time_start= GetRunTime();
for($i= 0; $i $str= $arr[$i];
}
$time_end= GetRunTime();
$time_used= $time_end- $time_start;
echo '使用時間:'.round($time_used, 7).'(s)

';
unset($str, $time_start, $time_end, $time_used);
####################################
$time_start= GetRunTime();
while(list($key, $val)= each($arr)){
$str= $val;
}
$time_end= GetRunTime();
$time_used= $time_end- $time_start;
echo 'その間の使用時間:'.round($time_used, 7).'(s)

';
unset($str, $key, $val, $time_start, $time_end, $time_used);
####################################
$time_start= GetRunTime();
foreach($arr as$key=>$val){
$str= $val;
}
$time_end= GetRunTime();
$time_used= $time_end- $time_start;
echo 'foreach の使用時間:'.round($time_used, 7).'(s)

';
?>

テスト結果:

使用時間:0.0228429(s)

その間の使用時間:0.0544658(s)

foreachの使用時間:0.0085628(s)

テストを繰り返した結果、同じ配列を走査する場合、foreach が最も速く、while が最も遅いことがわかりました。原則として、foreach は (配列をコピーすることによって) 配列のコピーを操作しますが、while は配列の内部インデックスを移動することによって操作します (foreach は最初に配列を移動するため)。実行開始時にコピーされますが、while は内部ポインタを直接移動します)、結果はまったく逆になります。その理由は、foreach が PHP の内部実装であるのに対し、while は一般的なループ構造であるためです。したがって、一般的なアプリケーションでは、foreach はシンプルで効率的です。 PHP5 では、foreach はクラスの属性をトラバースすることもできます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/824613.html技術記事 1. 配列走査の 3 つの方法の紹介 1. foreach() foreach() は、配列内のデータを走査するための最も単純かつ効果的な方法です。 #example1: コードをコピーします。 コードは次のとおりです: php $colors= ar...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。