for와 foreach 중 어느 것이 더 효율적인가요? 왜?
이 글을 쓰게 된 이유는 주로 개발 과정에서 갑자기 다음과 같은 질문이 생겨서 PHP에 대한 이해를 깊게 하기 위해 깊이 있게 탐구하는 시간을 가졌기 때문입니다.
1. phper에서는 for 및 foreach 루프 순회가 거의 매일 사용되는데, 이 두 가지 순회 방법 중 어느 것이 더 효율적인가요?
2. 효율이 높은 이유는 무엇인가요?
3. 원칙은 무엇인가요?
먼저 첫 번째 문제를 해결해야 합니다. 간단한 테스트를 통해 테스트 결과를 살펴보겠습니다.
for 루프 탐색 방법:
public function getForTime(){ $big_Array = range(0,1000000,1); /* for循环遍历数组示例 */ $start_For_Time = $this->microtime_float(); //$array_Count = count($big_Array); for ($i=0;$i<count($big_Array);$i++) { $i; } $end_For_Time = $this->microtime_float(); $for_Time = $end_For_Time - $start_For_Time; echo 'for循环遍历耗时:'.$for_Time.'<br>'; }
foreach 루프 순회 방법:
public function getForeachTime(){ $big_Array = range(0,1000000,1); /* foreach循环遍历数组示例 */ $start_Foreach_Time = $this->microtime_float(); foreach ($big_Array as $key=>$val) { $key; } $end_Foreach_Time = $this->microtime_float(); $foreach_Time = $end_Foreach_Time - $start_Foreach_Time; echo 'foreach循环遍历耗时:'.$foreach_Time; }
시간 계산 방법:
/** * 时间统计函数 */ private function microtime_float($time = null) { list($usec, $sec) = explode(' ', $time ? $time : microtime()); return ((float)$usec + (float)$sec); }
두 가지 방법의 시간 소모를 살펴보세요.
/* * 输出结果:第一种情况:先count在for循环遍历耗时:0.028002023696899 秒 * foreach循环遍历耗时:0.003000020980835 秒 * 第二种情况:在for循环条件中做count遍历耗时:0.095005035400391 秒 * foreach循环遍历耗时:0.0040009021759033 秒 * */
위 테스트에서 우리는 분명히 두 가지 결론을 도출할 수 있습니다:
1、for循环遍历的效率是低于foreach循环遍历 2、for循环在外部做count和在条件中做count相比较,第一种效率更高
그럼 두 번째 질문: 이유는 무엇입니까? 고효율을 위해? 이 답변을 찾기 전에 먼저 세 번째 질문에 대해 논의해 보겠습니다. 원칙이 무엇인지 살펴보겠습니다.
for 루프:
$i에서 시작할 때마다 각 루프는 $i가 count보다 작은지 확인해야 하며, 이는 많은 시간이 걸립니다
count보다 작으면 계속하고 그렇지 않으면 루프가 종료되었습니다
foreach:
foreach 依赖 IEnumerable. 第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a, 以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束. 期间GetList()方法只执行一次. 从上面是分析我们明显可以得出结论:php 的foreach循环效率是大大高于for循环。
BUT: 이것이 정말 사실인가요? 어떤 사람들은 이 예가 이미 매우 명백하고 결론이 한눈에 분명하다고 말할 것입니다. 다른 가능성이 있습니까?
진실은 그렇게 간단하지 않다고 생각합니다. 만약 이것이 사실이라면 for 루프의 의미는 무엇입니까?
foreach는 for보다 몇 배 더 효율적이므로 foreach만 사용하면 충분하지 않나요? 개인적으로 제가 테스트한 예제에는 특정 제한 사항이 있으며 두 루프 방법의 효율성을 평가하는 절대적인 기준으로 사용할 수 없다고 생각합니다.
그러나 우리 PHP 사용자의 경우 일반적인 작업에서는 foreach 루프 순회를 사용하는 것이 더 좋습니다. 컴파일 계층의 작동 방식에 대해서는 너무 자세히 설명할 필요가 없습니다. 관심이 있다면 깊이 연구할 수 있습니다. .
다음은 한 네티즌의 답변입니다.
foreach를 구현하기 어려운 상황이 있기 때문에 for의 의미가 존재합니다. 자세한 내용은 Effective Java 조항 46을 참조하세요. PHP로 작업하면 기본적으로 서로 연결되어 있죠? 책에서는 foreach 모드 사용을 권장하지만 이 모드가 부적절한 세 가지 상황이 있습니다. 1. 필터링 - 컬렉션을 순회하고 선택한 요소를 제거해야 하는 경우 명시적 반복을 사용하고 해당 제거 메서드를 호출해야 합니다. 2. 변환 - 목록이나 배열을 반복하고 요소 값의 일부 또는 전부를 바꿔야 하는 경우 이러한 값을 설정하려면 목록의 반복자 또는 배열의 인덱스가 필요합니다. 3. 병렬 반복 - 여러 컬렉션을 병렬로 순회해야 하는 경우 모든 반복자 또는 인덱스가 함께 진행될 수 있도록 반복자 또는 인덱스 변수를 명시적으로 제어해야 합니다. 그런 다음 for 및 foreach는 성능 측면에서 서로 다른 데이터를 순회하는 것처럼 보입니다. 연결리스트나 배열 등 성능 차이가 있다는 게 최근 궁금했던 부분입니다.
관련 추천: "PHP 튜토리얼"
위 내용은 for와 foreach 중 어느 것이 더 효율적인가요? 왜?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Kernelsecuritycheckfailure(커널 검사 실패)는 비교적 일반적인 유형의 중지 코드입니다. 그러나 이유가 무엇이든 블루 스크린 오류로 인해 많은 사용자가 매우 괴로워합니다. 이 사이트에서는 사용자에게 17가지 유형을 주의 깊게 소개합니다. kernel_security_check_failure 블루 스크린에 대한 17가지 솔루션 방법 1: 모든 외부 장치 제거 사용 중인 외부 장치가 Windows 버전과 호환되지 않으면 Kernelsecuritycheckfailure 블루 스크린 오류가 발생할 수 있습니다. 이렇게 하려면 컴퓨터를 다시 시작하기 전에 모든 외부 장치를 분리해야 합니다.

1. Iterator와 foreach의 차이점은 다형성 차이입니다(foreach의 맨 아래 레이어는 Iterator입니다). Iterator는 인터페이스 유형이므로 컬렉션 유형이나 배열에 관심이 없습니다. for와 foreach 모두 컬렉션 유형을 알아야 합니다. 1. foreach의 최하위 레이어가 Iterator에 의해 작성된 코드라고 말하는 이유: 디컴파일된 코드: 2. foreach와 iterator에서 제거의 차이점을 살펴보세요. Alibaba Java Development Manual, 그러나 1번의 경우에는 오류가 보고되지 않으며, 2번의 경우(java.util.ConcurrentModificationException) 먼저 오류가 보고됩니다.

PHP가 foreach 루프 수를 결정하는 단계: 1. "$fruits" 배열을 만듭니다. 2. 초기 값이 0인 카운터 변수 "$counter"를 만듭니다. 3. "foreach"를 사용하여 루프를 만듭니다. 배열을 통해 루프 본문의 카운터 변수 값을 늘린 다음 각 요소와 해당 인덱스를 출력합니다. 4. "foreach" 루프 외부에 카운터 변수 값을 출력하여 루프가 도달하는 요소를 확인합니다.

이 기사에서는 키 값을 뒤집은 후 PHP가 배열을 반환하는 방법을 자세히 설명합니다. 편집자는 이것이 매우 실용적이라고 생각하므로 이 기사를 읽고 뭔가를 얻을 수 있기를 바랍니다. PHP 키 값 뒤집기 배열 키 값 뒤집기는 배열의 키와 값을 교환하여 원래 키를 값으로, 원래 값을 키로 사용하여 새 배열을 생성하는 배열 작업입니다. 구현 방법 PHP에서는 다음 방법을 통해 배열의 키-값 뒤집기를 수행할 수 있습니다. array_flip() 함수: array_flip() 함수는 키-값 뒤집기 작업에 특별히 사용됩니다. 배열을 인수로 받고 키와 값이 교환된 새 배열을 반환합니다. $original_array=[

Win10 스카이프를 제거할 수 있습니까? 이것은 많은 사용자가 알고 싶어하는 질문입니다. 많은 사용자가 이 응용 프로그램이 컴퓨터의 기본 프로그램에 포함되어 있고 이를 삭제하면 시스템 작동에 영향을 미칠 것이라고 걱정하기 때문입니다. 이 웹사이트 도움말 사용자 Win10에서 비즈니스용 Skype를 제거하는 방법을 자세히 살펴보겠습니다. Win10에서 비즈니스용 Skype를 제거하는 방법 1. 컴퓨터 바탕 화면에서 Windows 아이콘을 클릭한 다음 설정 아이콘을 클릭하여 들어갑니다. 2. "적용"을 클릭하세요. 3. 검색창에 "Skype"를 입력하고 검색된 결과를 클릭하여 선택하세요. 4. "제거"를 클릭하세요. 5

for를 사용하여 n 계승을 찾는 방법: 1. "for (var i=1;i<=n;i++){}" 문을 사용하여 루프 순회 범위를 "1~n"으로 제어합니다. 2. 루프에서; body에서는 "cj *=i"를 사용합니다. 1부터 n까지의 숫자를 곱하고 그 결과를 변수 cj에 할당합니다. 3. 루프가 끝나면 변수 cj의 값이 n의 계승이 되어 출력됩니다.

이 기사에서는 PHP가 반환하는 배열의 현재 요소에 대해 자세히 설명할 것입니다. 편집자는 이것이 매우 실용적이라고 생각하므로 이 기사를 읽고 뭔가를 얻을 수 있기를 바랍니다. PHP 배열의 현재 요소 가져오기 PHP는 배열의 현재 요소 가져오기를 포함하여 배열에 액세스하고 조작하기 위한 다양한 방법을 제공합니다. 다음은 일반적으로 사용되는 몇 가지 기술을 소개합니다. 1. current() 함수 current() 함수는 배열의 내부 포인터가 현재 가리키는 요소를 반환합니다. 포인터는 처음에 배열의 첫 번째 요소를 가리킵니다. 다음 구문을 사용하십시오. $currentElement=current($array);2.key() 함수 key() 함수는 현재 요소를 가리키는 배열 내부 포인터를 반환합니다.

차이점: 1. for는 인덱스를 통해 각 데이터 요소를 반복하는 반면 forEach는 JS 기본 프로그램을 통해 배열의 데이터 요소를 반복합니다. 2. for는 break 키워드를 통해 루프 실행을 종료할 수 있지만 forEach는 그렇지 않습니다. for는 루프 변수의 값을 제어하여 루프 실행을 제어할 수 있지만 forEach는 루프 외부에서 루프 변수를 호출할 수 없지만 forEach는 루프 외부에서 루프 변수를 호출할 수 없습니다. forEach보다 높습니다.
