PHP 배열 색인:$array[$인덱스]vs$array["$지수는"]vs$array["{$인덱스}"]
문제
의 차이점은 무엇입의 경우에는 이러한 방법의 인덱싱로 PHP 배열:
$array[$index]
$array["$index"]
$array["{$index}"]
나는 모두에 관심이 있는 성능과 기능적인 차이점이 있습니다.
업데이트:
(에서 응답을 제레미)나는 확실하지 않다 그렇습니다.내가 이것을 실행 코드:
$array = array(100, 200, 300);
print_r($array);
$idx = 0;
$array[$idx] = 123;
print_r($array);
$array["$idx"] = 456;
print_r($array);
$array["{$idx}"] = 789;
print_r($array);
과이 출력:
Array
(
[0] => 100
[1] => 200
[2] => 300
)
Array
(
[0] => 123
[1] => 200
[2] => 300
)
Array
(
[0] => 456
[1] => 200
[2] => 300
)
Array
(
[0] => 789
[1] => 200
[2] => 300
)
해결책
보@svec 및@미니다.모든 편수는 형식의'int'첫째,그런 형식 문자열'',그리고 캐스팅 될 것으로 PHP 용합니다.
성능명,$인덱스보다 더 빨리해야"$색인"및"{$인덱스}"(는 동일합니다).
을 시작하면 큰따옴표 문자열 PHP 으로 갈 것이다 보간 모드 및 치료 문자열로 번지만,변 마커($,{},등등)를 바꾸기에서 로컬 범위가 있습니다.이 때문에 대부분의 토론,진실한'정전'문자열이 항상 있어야 하나의 견적이 필요하지 않는 경우 탈출 바로 가기 좋아요" "또는" "기 때문에,PHP 이 필요하지 않습니다려고 보간에서 문자열 런타임과 전체 문자열을 컴파일할 수 있으로 합니다.
이 경우,doublequoting 이에 복사$인덱스로 해당 문자열,문자열을 반환합,어디에 사용하여 직접$지수는 그냥 return string.
다른 팁
나는 시간이 초과의 3 가지 방법을 사용하여 인덱스는 다음과 같다:
for ($ii = 0; $ii < 1000000; $ii++) {
// TEST 1
$array[$idx] = $ii;
// TEST 2
$array["$idx"] = $ii;
// TEST 3
$array["{$idx}"] = $ii;
}
첫 번째로 설정의 테스트 사용 $idx=0
, 두 번째 사용되는 설정 $idx="0"
, 고,세 번째 설정 사용 $idx="blah"
.타이밍이었을 사용하여 수행 microtime()
diff.내가 사용하여 WinXP,PHP,5.2,아파치 2.2,Vim.:-)
그 결과는 다음과 같습니다:
용 $idx = 0
$array[$idx] // time: 0.45435905456543 seconds
$array["$idx"] // time: 1.0537171363831 seconds
$array["{$idx}"] // time: 1.0621709823608 seconds
ratio "$idx" / $idx // 2.3191287282497
ratio "{$idx}" / $idx // 2.3377348193858
용 $idx = "0"
$array[$idx] // time: 0.5107250213623 seconds
$array["$idx"] // time: 0.77445602416992 seconds
$array["{$idx}"] // time: 0.77329802513123 seconds
ratio "$idx" / $idx // = 1.5163855142717
ratio "{$idx}" / $idx // = 1.5141181512285
용 $idx = "blah"
$array[$idx] // time: 0.48077392578125 seconds
$array["$idx"] // time: 0.73676419258118 seconds
$array["{$idx}"] // time: 0.71499705314636 seconds
ratio "$idx" / $idx // = 1.5324545551923
ratio "{$idx}" / $idx // = 1.4871793473086
그래서 $array[$idx]
은 손 다운의 우승자는 성과,경쟁에서 적어도 내에서 기계입니다.(결과는 매우 반복 가능하며,BTW,나는 그것을 실행 3 4 번과 같은 결과입니다.)
내가 믿는 성능 관는 배열에"$지수는"]가 보다 빠르게 배열$인덱스]참조하십시오 을 최적화하기 위한 코드 PHP 성능
모든 것을 믿지 않을 읽을 맹목적으로...나는 당신이 오해다.이 문서에서 말한 배열'인덱스']보다 빠르$array[index]는 인덱스 문자열, 아닌 변수입니다.기 때문이다하지 않는 경우에 포장 따옴표 PHP 보이는 일정한 var 을 찾지 못하고 있습니다 그래서 당신이하게 하기 위하여 의미하는 문자열입니다.
때 다른 인덱싱 방법을 해결을 서로 다른 지?
에 따라 http://php.net/types.array, 배열 색인 수 있습니다 정수 또는 문자열입니다.를 사용하려고 하는 경우 플로트 인덱스로,그것은 잘 그것의 정수입니다.그래서 만약 $index
은 부동으로 값 3.14,다음 $array[$index]
이 평가 $array[3]
고 $array["$index"]
이 평가 $array['3.14']
.여기에 몇 가지는 코드를 확인합니다:
$array = array(3.14 => 'float', '3.14' => 'string');
print_r($array);
$index = 3.14;
echo $array[$index]."\n";
echo $array["$index"]."\n";
출력:
Array([3] => float [3.14] => string)
float
string
응답을 업데이트:
Oh,당신이 바로,나 PHP 변환해야 합 배열 색인하는 문자열을 번호를 포함하는 경우 단지 숫자가 있습니다.이 코드:
$array = array('1' => 100, '2' => 200, 1 => 300, 2 => 400);
print_r($array);
그리고 출력:
Array([1] => 300 [2] => 400)
나는 몇 가지 이상의 테스트하고 발견하는 경우 배수(또는 열쇠)의 숫자,그것의 항상 변환하여 정수,그렇지 않으면 그것의 문자열입니다.
ejunker:
당신은 이유를 설명 할 수 있습니 더 빠른?그렇지 않을 통역을 추가 단계를 분석"$인덱스로"문자열을 사용하여 색인으로 대신 사용하$인덱스로인가?
는 경우$수는 문자열이에는 차이가 없기 때문에$index,"$index",및"{$인덱스}"모든 평가하여 같은 문자열입니다.는 경우$인덱스 번호,예를 들어 10,첫 번째 라인을 평가하$array[10]및 다른 두 개의 선을 평가하는 배열에"10"]는 다른 요소보다는$array[10].
내가 믿는 성능 측면에서 볼 때는 배열에"$지수는"]보다 빠르게 배열$인덱스]보 모범 사례를 최적화하 PHP 성능
또 다른 변화는 내가 사용하는 때때로 내가 배열 내의 문자열은 다음과 같습니다.
$str = "this is my string {$array["$index"]}";
편집:내가 무엇을 의미하는 말입$행['id']보다 빠르$행[id]