PHP 배열 색인:$array[$인덱스]vs$array["$지수는"]vs$array["{$인덱스}"]

StackOverflow https://stackoverflow.com/questions/6628

  •  08-06-2019
  •  | 
  •  

문제

의 차이점은 무엇입의 경우에는 이러한 방법의 인덱싱로 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]

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top