ホームページ  >  記事  >  バックエンド開発  >  PHP 配列の走査方法と効率の比較

PHP 配列の走査方法と効率の比較

伊谢尔伦
伊谢尔伦オリジナル
2017-01-16 14:19:351311ブラウズ

この記事では主に、PHP、list()、each()、while で配列をループするいくつかのメソッドの概要を紹介し、必要な人のためにこれらのメソッドの使用法と関連する効率の比較を説明します。 。 参照する。

foreach は配列を走査します

配列を使用する場合、多くの場合、配列を走査して各キーまたは要素の値を取得する必要があります。PHP には、特に配列を走査する関数がいくつか用意されています。ここではまず、配列走査関数 foreach の使用法を紹介します。

構造形式:

foreach ( array_expression as $value ) statement
/* array_expression是要遍历的数组
   as作用是将数组的值赋给$value
   statement是后续语句
*/

例 1:

<?php
 &#39;白色&#39; ,
  &#39;black&#39; => &#39;黑色&#39; ,
  &#39;red&#39; => &#39;红色&#39; ,
  &#39;green&#39; => &#39;绿色&#39;,
  &#39;yellow&#39; => &#39;黄色&#39;);
 foreach( $color as $c) echo $c ."
";    
?>

foreach を通じて要素の値だけでなくキー名も取得できます。構造形式:

foreach ( array_expression as $key => $value ) statement

上記の 7 行目のコードを変更します。例:

foreach( $color as $c) echo $c ."<br>";

対象:

foreach( $color as $key => $c) echo $key.$c ."<br>";

配列の走査用

PHP の定義済み配列走査関数の一部に加えて、for ステートメントのループ機能を使用して配列を走査し、それを出力します。以下に例を示します。

<?php 
 $a[]="张学友"; /* 定义数组 */
 $a[]="刘德华";
 $a[]="黎明";
 $a[]="郭富城";
 $s=count($a); /* 统计数组个数 */
 for($i=0;$i<$s;$i++){ /* 遍历数组 */
  echo $a[$i] ."<br /-->"; /* 显示数组 */
 }
?>

while() は、配列を走査するために list() および each() とともに使用されます

使用される構文形式は次のとおりです:

<?php 
    $urls= array(&#39;aaa&#39;,&#39;bbb&#39;,&#39;ccc&#39;,&#39;ddd&#39;); 
    while(list($key,$val)= each($urls)) { 
      echo "This Site url is $val.<br />"; 
    } 
?>

いくつかの配列走査の速度をテストしてみましょう

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

<?php
  $arr= array();
  for($i= 0; $i< 50000; $i++){
  $arr[]= $i*rand(1000,9999);
  }
  function GetRunTime()
  {
  list($usec,$sec)=explode(" ",microtime());
  return ((float)$usec+(float)$sec);
  }
  ######################################
  $time_start= GetRunTime();
  for($i= 0; $i< count($arr); $i++){
  $str= $arr[$i];
  }
  $time_end= GetRunTime();
  $time_used= $time_end- $time_start;
  echo &#39;Used time of for:&#39;.round($time_used, 7).&#39;(s)<br /><br />&#39;;
  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 &#39;Used time of while:&#39;.round($time_used, 7).&#39;(s)<br /><br />&#39;;
  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 &#39;Used time of foreach:&#39;.round($time_used, 7).&#39;(s)<br /><br />&#39;;
?>

テスト結果:

Used time of for:0.0228429(s)
Used time of while:0.0544658(s)
Used time of foreach:0.0085628(s)

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

この記事が皆様のお役に立てれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。