PHP에서 배열을 초기화하는 가장 좋은 방법


297

다른 언어 (예 : AS3)에서는 이와 같이 수행하면 객체 생성 및 인스턴스화가 var foo = []아닌 새로운 배열을 초기화하는 것이 더 빠릅니다 var foo = new Array(). PHP에 동등한 것이 있는지 궁금합니다.

class Foo {
    private $arr = array(); // is there another / better way?
}

11
그게 내가 한 전부 야
Matthew

2
답변을 해주신 모든 분들께 감사드립니다. Andy가 가장 깊이있는 것처럼 보였으므로 임의로 답변을 선택해야했습니다.
Tom Auger

1
이 질문은 많은 도움이됩니다
Hitesh


2
@ zx1986 빈 배열을 만드는 번거로운 방법입니다. 확실히 OP보다 작 $arr = array()거나$arr = []
Tom Auger

답변:


189

ECMAScript 구현 (예 : ActionScript 또는 JavaScript)에서 Array()생성자 함수이며 []배열 리터럴 문법의 일부입니다. 둘 다 완전히 다른 방식으로 최적화되고 실행되며 문자 호출은 함수 호출의 오버 헤드로 인해 방해받지 않습니다.

반면에 PHP는 함수처럼 보이지만 그렇게 취급되지 않는 언어 구조를 가지고 있습니다. []대안으로 지원하는 PHP 5.4의 경우에도 컴파일러 / 파서와 관련하여 완전히 동의어이므로 오버 헤드에는 차이가 없습니다.

// Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

이전 버전의 PHP를 지원해야하는 경우 이전 구문을 사용하십시오. 가독성에 대한 논쟁도 있지만 오랜 JS 개발자이기 때문에 후자는 다소 자연 스럽습니다. 실제로 []PHP를 처음 배울 때 사용하여 배열을 초기화하는 실수를 저질렀습니다 .

이러한 언어 변경 은 원래 다음과 같은 이유로 핵심 개발자에 대한 다수의 투표로 인해 제안 및 거부되었습니다.

이 패치는 핵심 개발자의 대다수가 투표를했기 때문에 허용되지 않습니다. 핵심 개발자와 사용자 투표 사이에 누적 된 평균을 취하면 반대 의견을 나타내는 것처럼 보이지만 장기적으로 패치 마녀가 지원되지 않거나 유지되지 않는 것은 패치 마녀를 제출하는 것이 무책임한 것으로 보입니다.

그러나 ECMAScript 구문을 사용하는 MongoDB와 같은 인기있는 데이터베이스에 대한 지원 구현의 영향을 받아 최대 5.4로 바뀌는 마음의 변화가있는 것으로 보입니다.


51
아마도 "5.4"를 철자 할 수있는 사람들이 투표 과정을 인수했기 때문에 5.4가 변경되었을 수 있습니다.
Rob Grant

40
$array = [];JS와 PHP를 더 쉽게주고받을 수 있기 때문에 선호합니다 .
Justin

그래서 $array = []; 더 나은 옵션입니까 ??? 아니면 다른 것을 시도해야합니까? 어느 것이 더 낫습니다
Hitesh

2
@hitesh : 개인적인 취향의 문제입니다. 그것들은 기능적으로 완전히 동일 []하며 입력하기가 조금 더 쉽습니다.
Andy E

7
[] 구문은 보편적으로 선호되는 것 같지만 여전히 5.3을 독점적으로 사용하는 호스트가 많다는 점에 유의해야합니다. 코드를 배포하려면 [] 구문이 치명적입니다.
etc

204
$myArray = []; 

빈 배열을 만듭니다.

나중에 다음과 같이 배열에 값을 넣을 수 있습니다.

$myArray[] = "tree";
$myArray[] = "house";
$myArray[] = "dog";

이 시점에서 $ myArray에는 "tree", "house"및 "dog"이 포함됩니다. 위의 각 명령은 이미 존재했던 항목을 보존하면서 배열에 추가합니다.

다른 언어에서 왔을 때 배열에 추가하는이 방법은 나에게 이상하게 보였습니다. $ myArray + = "dog"과 같은 작업이나 Visual Basic 컬렉션과 같은 "add ()"메서드와 같은 작업을 수행해야했습니다. 그러나이 직접 추가 구문은 확실히 짧고 편리합니다.

실제로 unset () 함수를 사용하여 항목을 제거해야합니다.

unset($myArray[1]); 

... 배열에서 "house"를 제거합니다 (배열은 0을 기준으로 함).

unset($myArray); 

... 전체 배열을 파괴합니다.

분명히 배열에 추가하기위한 빈 대괄호 구문은 단순히 인덱스를 할당하는 대신 PHP가 각 값에 자동으로 인덱스를 할당하도록 지시하는 방법입니다. 덮개 아래에서 PHP는 실제로 다음을 수행합니다.

$myArray[0] = "tree";
$myArray[1] = "house";
$myArray[2] = "dog";

원하는 경우 인덱스를 직접 할당 할 수 있으며 원하는 숫자를 사용할 수 있습니다. 일부 항목에는 색인 번호를 지정할 수 있지만 다른 항목에는 지정할 수 없습니다. 그렇게하면 PHP는 누락 된 인덱스 번호를 채우고 할당 된 최대 인덱스 번호에서 증가합니다.

따라서 이렇게하면 :

$myArray[10] = "tree";
$myArray[20] = "house";
$myArray[] = "dog";

... "dog"항목에는 21의 색인 번호가 부여됩니다. PHP는 증분 색인 할당에 지능적인 패턴 일치를 수행하지 않으므로 "dog"에 30의 색인을 할당하기를 원했을 수도 있습니다. ". 다른 함수를 사용하여 배열의 증분 패턴을 지정할 수 있습니다. 나는 여기에 들어 가지 않을 것이지만 PHP 문서에는 전부 들어 있습니다.

건배,

-= 카메론


6
$ ary = []는 PHP 5.4 이후에만 작동합니다. 그러나 성능 관점에서 [] 대 array ()에는 이점이 없습니다.
Tom Auger

1
이전 버전의 경우 array_push () w3schools.com/php/func_array_push.asp를 사용할 수 있습니다 . 이와 관련된 성능 저하가 있는지 모르겠습니다.
Mark

3
@TomAuger의 포인트 @Mark를 오해했습니다. $array[] = 'foo'구버전의 PHP에서 잘 작동합니다. $array = [];5.4의 새로운 배열 만 초기화하는 것입니다.
Codemonkey

공정하게 말하면 실제로 OP의 질문에 대답합니다.
Smitty

ㅋㅋㅋ ㅋㅋㅋ 수십 년 동안의 PHP와 나는 단지 array_push가 필요 없다는 것을 배우고 있습니다.
Bangkokian

61

PHP 5.4 이전 :

$myArray = array();

PHP 5.4 이상

$myArray = [];

PHP 5.4 이상을 사용하여 어떻게 다차원 배열을 만들 수 있습니까?
Siraj Alam

26

PHP에서 배열은 배열입니다. 기본 대 객체 고려 사항이 없으므로 비교할만한 최적화가 없습니다.


1
가장 좋은 답변 IMO : 다른 구문이 있지만 성능과 관련하여 모두 동일합니다.
Matthieu Napoli

1
둘 다에 관련된 성능 문제가 있습니까? 어디에서 확인할 수 있습니까? 링크 또는 문서
Hitesh

2
결과적으로 코드가 5.4 이전 환경에서 절대 실행되지 않을 때까지 $ array = new array ()를 사용하십시오.
Tom Auger

20

당신이하고있는 일은 100 % 정확합니다.

좋은 이름 지정 측면에서 개인 / 보호 된 속성 앞에는 밑줄이 표시되어 공개되지 않은 것이 분명해집니다. 예 private $_arr = array()또는public $arr = array()


2
PHP에서는 항상 $this값을 얻는 데 사용하고 공용 속성을 사용해서는 안되므로 밑줄로 이름을 지정하지 않는 것이 좋습니다 .
meze

1
당신처럼 액세스 것 @meze $this->arr$this->_arr. 왜 공공 재산을 사용해서는 안됩니까?!
James C

5

이 시도:

    $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }

4
멋지지만 실제로 유용한 코딩 패턴보다 파티 트릭으로 더 많이 생각하지 않습니까?
Tom Auger

속성 패턴을 가진 객체에서 배열을 만들고 결국 배열로 변환하려는 경우 유용 할 수 있습니다.
Jomar Sevillejo

4

없습니다 다른 방법 이 최고입니다 그래서.

편집 :이 답변은 PHP 5.4 이상부터 유효하지 않습니다.


5.4는 배열에 대한 속기 구문을 도입했습니다.
Andy E

13
@Motes 왜 그렇게 미워 하는가 : '(? 키딩을 제외하고, 나는 이전 답변을 "삼진"함으로써 더 분명하게 만들었습니다. 초보자가 대답이 바뀌 었다는 것을 이해하는 것이 여전히 유용 할 수 있습니다.
Matthieu Napoli

@Motes 사람들은 답변을 삭제할 때 답변에서 rep gain을 잃습니다. 편집하는 것이 좋습니다.
mbomb007

4

간단한 배열 초기화 :

<?php $array1=array(10,20,30,40,50); ?>

배열 내에서 배열 초기화 :

<?php  $array2=array(6,"santosh","rahul",array("x","y","z")); ?>

출처 : 코드를위한 Sorce


3
원래 질문은 배열 을 초기화하는 방법에 관한 것이 었습니다 .
Tom Auger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.