오늘 친구가 PHP에서 배열을 탐색하는 방법에 대해 질문을 해서 몇 가지를 알려줬습니다. 그런데 요약해서 글을 쓰겠습니다. 만약 요약이 완전하지 않다면 지적해주세요
먼저 foreach()
foreach()는 배열의 데이터를 탐색하는 가장 간단하고 효과적인 방법입니다.
<?php $urls= array('aaa','bbb','ccc','ddd'); foreach ($urls as $url){ echo "This Site url is $url! <br />"; } ?>
결과 표시:
This Site url is aaa This Site url is bbb This Site url is ccc This Site url is ddd
둘째, while()은 list(), Each()와 함께 사용됩니다.
<?php $urls= array('aaa','bbb','ccc','ddd'); while(list($key,$val)= each($urls)) { echo "This Site url is $val.<br />"; } ?>
결과 표시:
This Site url is aaa This Site url is bbb This Site url is ccc This Site url is ddd
셋째, for()는 for를 사용하여 배열을 순회합니다
<?php $urls= array('aaa','bbb','ccc','ddd'); for ($i= 0;$i< count($urls); $i++){ $str= $urls[$i]; echo "This Site url is $str.<br />"; } ?>
결과 표시:
This Site url is aaa This Site url is bbb This Site url is ccc This Site url is ddd
때때로 사람들은 배열을 순회하는 방법 중 어떤 것이 더 빠른지 묻기도 합니다. 간단한 테스트를 해 보면 이해하게 될 것입니다.
=========== 배열 탐색의 세 가지 속도를 테스트해 보겠습니다 ===========
일반적으로 배열을 순회하는 방법에는 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 'Used time of for:'.round($time_used, 7).'(s)<br /><br />'; 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 'Used time of while:'.round($time_used, 7).'(s)<br /><br />'; 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 'Used time of foreach:'.round($time_used, 7).'(s)<br /><br />'; ?>
테스트 결과:
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가 클래스 속성을 탐색할 수도 있습니다.
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.