PHP에서 Foreach 는 가장 일반적으로 사용되는 배열에 사용되며 어레이의 모든 요소에 간결하고 효율적으로 액세스 할 수 있습니다. 그러나 일부 구체적인 경우 array_shift () 함수를 조합하여 이동 효율을 향상시킬 수 있습니다. Array_Shift ()는 일반적으로 배열의 첫 번째 요소를 삭제하는 데 사용되지만 Foreach 와 결합하면 간결한 코드를 유지하면서 특수 목적을 달성 할 수 있습니다. 이 기사는 Foreach 루프에서 Array_shift ()를 사용하는 방법을 분석하고 장점과 제한 사항을 논의합니다.
array_shift () 는 PHP에서 일반적으로 사용되는 배열 작동 함수입니다. 배열에서 첫 번째 요소를 제거하고 배열의 다른 요소를 앞으로 이동하는 데 사용됩니다. 이 작업은 원래 배열을 변경하므로 원래 배열을 수정하지 않으려면 먼저 사본을 만드는 것을 고려할 수 있습니다.
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">array_shift</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>); </span><span><span class="hljs-comment">// $array 이제 [2, 3, 4]</span></span><span>
</span></span>
array_shift () 제거 된 요소를 반환합니다. 배열이 비어 있으면 NULL을 반환하십시오.
Foreach 루프 자체는 매우 직관적이며 배열의 각 요소를 지정된 변수에 자동으로 할당합니다. 그러나 Traversal 동안 배열에서 요소를 동적으로 제거하려면 Array_shift ()를 사용할 수 있습니다. 이 접근법은 루프 용 전통적인 인덱스를 수동으로 관리하지 않고도 배열에서 요소에 요소에 액세스하고 삭제하는 데 도움이 될 수 있습니다.
다음은 Foreach 루프에서 Array_shift ()를 사용하는 방법을 보여주는 예입니다.
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> => </span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">array_shift</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>); </span><span><span class="hljs-comment">// 각 트래버스 후 배열의 첫 번째 요소를 제거합니다.</span></span><span>
}
</span></span>
이 예에서는 Array_Shift ()가 매번 배열의 첫 번째 요소를 제거하므로 Foreach는 배열의 각 요소에 액세스하고 각 루프의 배열 내용을 수정합니다. 루프 동안 배열의 수정을 신경 쓰지 않고 배열의 현재 상태에 따라 Foreach 반복을 주목할 가치가 있습니다.
Concise Code : 배열을 가로 지르는 동안 배열을 수정 해야하는 경우 Foreach 및 Array_shift () 를 결합하면 배열 인덱스를 수동으로 관리하지 않고도 코드를보다 간결하게 만들 수 있습니다.
자동 액세스 및 제거 : 각 루프에서 배열의 첫 번째 요소가 자동으로 제거되어 배열 구조를 명시 적으로 조정할 필요가 없습니다.
성능 문제 : Array_Shift () 로 인해 배열의 첫 번째 요소가 제거되지만 호출 될 때마다 배열이 다시 표시되므로 큰 배열의 성능 손실이 발생할 수 있습니다. 특히 배열이 크면 array_shift () 로 자주 호출하면 많은 메모리 작업이 발생합니다.
원래 배열에 영향을 미칩니다 : Array_Shift () 는 원래 배열을 수정하므로 원래 배열의 구조를 보존 해야하는 경우 조심해야합니다. 원래 배열을 수정하지 않으려면 먼저 배열 복사를 고려할 수 있습니다.
이 방법은 다음 시나리오에서 사용하기에 적합합니다.
배열 요소를 가로 지르고 점차 삭제 해야하는 경우, 삭제 작업은 배열의 전면에서 시작해야합니다.
배열 크기가 작거나 삭제 작업이 자주 발생하지 않으면 성능 병목 현상이 분명하지 않습니다.
배열의 인덱스 또는 성능 최적화에 너무 많은주의를 기울이지 않고 코드를 단순화 해야하는 경우.
다음은 Array_shift ()를 사용하여 간단한 큐 작업을 구현하는보다 실용적인 예입니다. 대기열의 특성은 첫 번째 최초의 첫 번째 (FIFO)이며 Array_Shift ()를 사용 하여이 동작을 시뮬레이션 할 수 있습니다.
<span><span><span class="hljs-variable">$queue</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$item</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_shift</span></span><span>(</span><span><span class="hljs-variable">$queue</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Processing item: <span class="hljs-subst">$item</span></span></span><span>\n";
</span><span><span class="hljs-comment">// 대기열 항목에서 관련 작업을 수행하십시오</span></span><span>
}
</span></span>
이 예에서는 array_shift ()가 큐의 첫 번째 요소를 제거하고 반환 한 다음 큐가 비어있을 때까지 처리합니다.
foreach loops와 array_shift ()를 결합하면 특정 유형의 작업을 처리 할 때 코드가 더 간결하게 만들 수 있습니다. 그러나이 방법은 특히 큰 배열을 다룰 때 고성능 오버 헤드를 가지고 있습니다. 따라서 성능 요구 사항이 높은 시나리오에서는 배열의 빈번한 재 표시를 피하기 위해 루프 를 사용하는 것과 같은 다른 최적화 솔루션을 고려해야 할 수 있습니다.