>  기사  >  백엔드 개발  >  PHP 배열 순회 방법 및 효율성 비교

PHP 배열 순회 방법 및 효율성 비교

伊谢尔伦
伊谢尔伦원래의
2017-01-16 14:19:351311검색

이 글에서는 주로 list(),each(), 그리고 PHP에서 배열을 반복하는 여러 가지 방법에 대한 요약을 소개합니다. 이 글의 초점은 필요한 사람들을 위해 이러한 방법의 사용과 관련 효율성 비교를 설명하는 것입니다. 친구들이 그것을 참조할 수 있습니다.

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의 세 가지 방법이 있습니다. 그 중 가장 간단하고 편리한 것은 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보다 빠르다고 여겨집니다. 실행이 시작되면 복사되고 while은 내부 포인터를 직접 이동하지만 결과는 정반대입니다. 그 이유는 foreach는 PHP의 내부 구현인 반면 while은 일반적인 루프 구조이기 때문입니다. 따라서 일반 애플리케이션에서는 foreach가 간단하고 효율적입니다. PHP5에서는 foreach가 클래스 속성을 탐색할 수도 있습니다.

이 글이 모든 분들께 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.