PHP에서 배열 작업은 매우 일반적인 프로그래밍 작업입니다. 데이터를 처리하거나 복잡한 계산을 수행하든 배열은 기본 데이터 구조 중 하나입니다. 충전 배열은 일반적인 요구 사항이며 PHP는 배열을 채우는 여러 가지 방법을 제공하며 가장 일반적인 두 가지 방법은 Array_fill () 함수를 사용하고 For 루프를 통해 어레이를 수동으로 채우는 것입니다.
이 두 가지 방법에는 고유 한 장점과 단점이 있습니다. 이 기사는 성능 관점에서 배열을 채우는 두 가지 방법을 비교하여 개발자가 적절한 방법을 더 잘 선택할 수 있도록 도와줍니다.
Array_Fill () 은 PHP의 내장 기능이며 지정된 범위에서 배열 요소를 채우는 기능입니다. 기능 서명은 다음과 같습니다.
<span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">array_fill</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$start_index</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$num</span></span><span>, </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span>)
</span></span>
$ start_index : 배열의 시작 색인.
$ num : 채울 요소의 수.
$ 값 : 패딩의 값.
Array_Fill ()은 지정된 인덱스 위치에서 시작하여 지정된 요소 수를 채우고 모든 요소의 값은 제공된 $ 값 입니다.
예를 들어, array_fill ()을 사용하여 각각 0 의 값을 가진 10 개의 요소로 배열을 채 웁니다.
<span><span><span class="hljs-variable">$arr</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span></span>
이 예에서 배열 $ ARR 의 0 번째 요소는 각 요소에 채워진 10 개의 요소로 시작하고 각 요소의 값은 0 입니다.
배열을 채우는 또 다른 일반적인 방법은 for 루프를 사용하여 수동으로 값을 할당하는 것입니다. 각 인덱스의 값을 수동으로 지정함으로써 개발자는 충전 프로세스를보다 유연하게 제어 할 수 있습니다. 일반적인 코드 예제는 다음과 같습니다.
<span><span><span class="hljs-variable">$arr</span></span><span> = [];
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-number">10</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-variable">$i</span></span><span>] = </span><span><span class="hljs-number">0</span></span><span>;
}
</span></span>
여기서는 for 루프를 사용하여 인덱스 0 으로 시작하여 배열의 각 위치를 0 으로 채 웁니다. Array_fill () 과 달리 루프 는 유연성이 높아져 개발자가 충전 과정에서보다 복잡한 작업을 수행 할 수 있습니다.
Array_Fill () 의 성능과 루프 의 성능을 비교할 때는 실행 효율성, 메모리 소비 및 코드 유지 관리를 포함한 여러 측면을 고려해야합니다. 아래에서 하나씩 분석합시다.
성능면에서 Array_fill ()은 일반적으로 루프 보다 빠르게 실행됩니다. 그 이유는 매우 간단합니다. array_fill () 은 PHP의 내장 기본 기능입니다. 고도로 최적화되었으며 기본 메모리에서 직접 작동합니다. FER 루프의 각 반복에는 어레이 인덱스, 할당 등에 액세스하는 추가 작업이 필요하며, 이는 상대적으로 느립니다.
간단한 성능 테스트로 이것을 확인할 수 있습니다.
<span><span><span class="hljs-comment">// 사용array_fill</span></span><span>
</span><span><span class="hljs-variable">$start</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$arr1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">1000000</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-variable">$end</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"array_fill시간이 많이 걸립니다:"</span></span><span> . (</span><span><span class="hljs-variable">$end</span></span><span> - </span><span><span class="hljs-variable">$start</span></span><span>) . </span><span><span class="hljs-string">"두번째\n"</span></span><span>;
</span><span><span class="hljs-comment">// 사용for주기</span></span><span>
</span><span><span class="hljs-variable">$start</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$arr2</span></span><span> = [];
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-number">1000000</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-variable">$arr2</span></span><span>[</span><span><span class="hljs-variable">$i</span></span><span>] = </span><span><span class="hljs-number">0</span></span><span>;
}
</span><span><span class="hljs-variable">$end</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"for주기시간이 많이 걸립니다:"</span></span><span> . (</span><span><span class="hljs-variable">$end</span></span><span> - </span><span><span class="hljs-variable">$start</span></span><span>) . </span><span><span class="hljs-string">"두번째\n"</span></span><span>;
</span></span>
많은 양의 데이터가 채워지면 Array_Fill ()의 기본 최적화는 추가 인덱스 조회 및 할당 작업이 필요하기 때문에 Array_Fill () 의 실행 시간은 일반적으로 FOR 루프의 실행 시간보다 짧습니다.
메모리 소비 측면에서, 둘은 일반적으로 크게 다르지 않습니다. array_fill () 이든 루프 의 경우, 채워진 배열 요소를 저장하려면 메모리가 필요합니다. Array_Fill () 은 내장 기능이므로 메모리 관리에 약간의 최적화가있을 수 있지만,이 최적화는 특히 배열이 비교적 큰 경우 메모리 소비에 상대적으로 작은 영향을 미칩니다.
그러나 For Loop (각 요소의 값을 계산하는 등)에서 더 복잡한 작업을 수행하면 메모리 소비가 추가 될 수 있습니다. 따라서 Array_fill () 은 간단한 채우기 작업에 더 적합하지만 루프 는 보다 복잡한 시나리오를 처리 할 수 있습니다.
Array_fill ()은 가독성 및 유지 보수 측면에서 분명히 좋습니다. 구문은 간결하고 명확하며 배열을 채우려는 의도를 직접 표현하며 루프 문에 의존하지 않습니다. 따라서 간단한 배열 채우기 작업의 경우 array_fill ()을 사용하면 코드의 가독성이 향상 될 수 있습니다.
For 루프는 유연하지만 비교적 길고 배열 인덱스 및 할당 프로세스를 명시 적으로 지정해야합니다. 복잡한 배열 채우기 작업의 경우 루프 에 대한 유연성이 필요할 수 있지만 간단한 채우기 만 수행하면 루프 를 사용하면 약간 번거 듭니다.
array_fill ()을 사용한 시나리오 :
연속 범위의 배열을 채워야하며 각 요소의 값은 동일합니다.
각 요소에 대한 복잡한 계산을 수행 할 필요가 없으며 지정된 수의 요소를 작성하십시오.
간결하고 이해하기 쉬운 코드를 작성하고 싶습니다.
루프 에 사용하는 시나리오 :
배열의 각 요소에 대한 복잡한 계산 또는 조건부 판단을 수행해야합니다.
채워진 배열은 불규칙합니다 (예 : 불규칙한 인덱스로 배열을 채우십시오).
충전 과정을 제어하려면 더 많은 유연성이 필요합니다.
비교를 수행함으로써 Array_fill ()은 일반적으로 성능 루프 보다 일반적으로, 특히 다량의 데이터를 처리 할 때 Array_fill ()은 배열을보다 효율적으로 채울 수 있습니다. 그러나 루프 의 경우 복잡한 작업이 필요한 시나리오에 더 큰 유연성을 제공합니다.
따라서 특정 응용 프로그램 시나리오에 따라 배열을 채우는 방법을 선택해야합니다. 배열 만 채우는 경우 Array_Fill ()은 더 적합한 선택입니다. 충전 과정에서 더 많은 작업을 수행 해야하는 경우 루프 가 더 적합합니다.