array_push ()와 $ array []의 차이점 =


117

PHP 매뉴얼에서 ( array_push )는 ..

array_push () 를 사용 하여 하나의 요소를 배열에 추가하는 경우 $ array [] = 를 사용하는 것이 좋습니다 . 이렇게하면 함수 호출에 대한 오버 헤드가 없기 때문입니다.

예 :

$arr = array();
array_push($arr, "stackoverflow");
print_r($arr);

vs

$arr[] = "stackoverflow";
print_r($arr);

나는 왜 큰 차이가 있는지 이해하지 못합니다.


8
하나는 함수 호출이고 다른 하나는 그렇지 않습니다. 정확히 상자에 언급 된 내용입니다.
KingCrunch 2013 년

1
하나는 위에서 언급 한 함수 호출로, 제어를 함수 호출로 /에서 전환하기 위해 일부 리소스를 사용한다는 의미입니다 (따라서 오버 헤드 처리가 발생 함). 반면, 나중에는 단순히 새로운 요소를 배열에 바로 할당하는 것입니다.
Ghazanfar Mir

2
이 질문은 저에게 많은 시간을 절약 해주었습니다 :)
RozzA

답변:


151

PHP에서 함수를 호출 할 때 (예 array_push():) 호출에 오버 헤드가 발생합니다. PHP는 함수 참조를 조회하고 메모리에서 해당 위치를 찾아 정의한 코드를 실행해야하기 때문입니다.

를 사용하면 $arr[] = 'some value';함수 호출이 필요하지 않으며 데이터 구조에 직접 추가를 구현합니다. 따라서 많은 데이터를 추가 할 때를 사용하는 것이 훨씬 빠르고 리소스 효율적 $arr[]입니다.


3
만약 그러한 표기법 "$ arr [] = 'some value';" 함수 호출로 귀결됩니까?
Tebe 2014-07-07

1
@gekannt 어떻게 그럴까요? 댓글의 '일부 가치'가 클로저라는 뜻인가요? 그것은 클로저의 참조를 배열에 저장합니다. '일부 값'이 호출되는 함수라는 것을 의미하면 해당 함수가 반환하는 모든 것을 추가합니다.
Kirkland

@Kirkland 연산자는 대부분의 C와 유사한 언어에서 대체 구문을 사용하는 함수일뿐입니다. 저는 PHP 전문가는 아니지만 C 방언이기 때문에 동일한 방식으로 연산자를 구현했다고 상상할 수 있습니다.
케빈

1
@Kevin : 동의합니다. 대체 구문 뒤에 함수가 있다는 것을 확신합니다. PHP 문서에서 다음과 같은 주석을 볼 수 있습니다. "하나의 요소를 추가하기 위해 array_push ()를 사용하는 경우 배열에 $ array [] =를 사용하는 것이 더 낫습니다. 이렇게하면 함수를 호출하는 오버 헤드가 없기 때문입니다. " 검색어로 뒤에 정확하게 볼 지금 시간이 없어 것은 : 검색 엔진 혼란 비트입니다
jnhghy - Alexandru Jantea

$arr[] = value더 빠른 실제 증거 가 있습니까? 컴파일러가 코드를 다르게 취급하는 이유를 상상하려고합니다.
c ..

44

array_push를 사용하여 한 번에 두 개 이상의 요소를 배열에 추가 할 수 있습니다.

예 : array_push($array_name, $element1, $element2,...)

여기서 $ element1, $ element2, ...는 배열에 추가 할 요소입니다.

그러나 한 번에 하나의 요소 만 추가하려면 다른 방법 (예 : $ array_name [] 사용)이 선호됩니다.


프로젝트 전체에서 필요에 따라 두 가지를 결합하는 것이 나쁜 습관입니까?
PBwebD

1
@ testing123 절대 아닙니다. 가독성, 호환성 등을 심각하게 저해하지 않는 한 (또는 특정 스타일 가이드를 준수해야하는 경우) 사용 가능한 가장 효율적인 솔루션을 사용하는 것이 좋습니다.
Chris Kraszewski

15

차이점은 "그런 식으로 함수를 호출하는 오버 헤드가 없기 때문에"아래 줄에 있습니다.

array_push()첫 번째 인수가 배열이 아닌 경우 경고를 발생시킵니다. 이것은 $var[]새 어레이가 생성 되는 동작 과 다릅니다 .


4
이유라고 말하지 않았습니다. 질문에서 차이는 질문을 받았다 이것은 또한 차이
베이 그

7

$array[]상자에 함수 호출에 대한 오버 헤드가 없다고 명시되어 있으므로 가능하면 항상 사용해야 합니다. 따라서 함수 호출보다 약간 빠릅니다.


4

array_push — 배열의 끝에 하나 이상의 요소를 밀어 넣습니다.

"단어의 양지 끝에 하나 이상의 원소 사용하는 것을 할을" $arr[]당신이하는 배열의 최대 크기를 얻을 것


다시 "$ arr []를 사용하여 그렇게하려면 배열의 최대 크기를 얻어야합니다" . 아니요, $arr[...index...] = $value;여기서 논의되는 내용 인 $arr[] = $value;. 끝을 밀기 위해 크기 나 배열을 알 필요가 없습니다. 여러 요소는 단순히 여러 번 호출 될 것이다 : $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve

2

설명 : 1. 첫 번째는 배열의 변수를 선언합니다.

2. 두 번째 array_push 메서드는 배열 변수의 문자열을 푸시하는 데 사용됩니다.

3. 마지막으로 결과를 인쇄합니다.

4. 두 번째 방법은 문자열을 배열에 직접 저장하는 것입니다.

5. print_r 메서드를 사용하여 데이터를 배열 값으로 인쇄합니다.

이 둘은 같다


1

둘 다 동일하지만 array_push는 배열 인 매개 변수에 루프를 만들고 $ array [] = $ element를 수행합니다.


0

나는 이것이 오래된 대답이라는 것을 알고 있지만 두 가지의 또 다른 차이점은 배열에 루프 당 2/3 이상의 값을 추가해야하는 경우 사용하는 것이 더 빠르다는 것을 다른 사람들이 아는 것이 도움이 될 수 있습니다.

     for($i = 0; $i < 10; $i++){
          array_push($arr, $i, $i*2, $i*3, $i*4, ...)
     }

대신에:

     for($i = 0; $i < 10; $i++){
         $arr[] = $i;
         $arr[] = $i*2;
         $arr[] = $i*3;
         $arr[] = $i*4;
         ...
     }

편집- for조건부 대괄호를 닫는 것을 잊었습니다.


1
이것이 array_merge와 어떻게 비교되는지 궁금합니다. 예 for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. 나는 array_push가 그것보다 약간 더 빠르다고 추측한다.
ToolmakerSteve

0

아무도 말하지 않았지만 array_push는 $ array [index]가 주어진 인덱스에 값을 삽입 할 수있는 END OF THE ARRAY에만 요소를 푸시합니다. 큰 차이.


질문은 "array_push ()와 $ array []의 차이 = 내가 말한 것은 하나의 차이점입니다. 큰 것!
Marco

1
나는 정중하게 동의하지 않습니다. 당신은 묘사하는 $array[index] = 다른 작업 보다 $array[] = .... 이 질문은 두 개의 코드를 제공하고 왜 그들 사이에 중요한 [성능] 차이 가 있는지 묻습니다 . 이 질문은 말 그대로 $array[] = ...인덱스를 포함하지 않는 특정 PHP 관용구 인을 의미합니다. 배열 + 인덱스는 다른 문제를 해결하고 다른 코드를 생성하며 다른 절충안입니다.
ToolmakerSteve
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.