2011-03-09 4 views
1

나는 다음과 같이 변수 변수를 사용하려고 해요 :이 작동하지 않습니다PHP 변수 변수 및 배열/기능

function keyValMyArray($nameofmyarray) { 
    foreach(${$nameofmyarray} as $key => $val) { 
    print "$key: $val<br>"; 
    } 
} 

$bookPrices = Array('Catcher in the Rye' => '$2', 'Curious George' => '$4.25', 'Dracula' => '$8'); 

keyValMyArray('bookPrices') 

. 내가 얻는 오류는 다음과 같습니다. foreach()에 잘못된 인수가 제공되었습니다.

누구든지이 인스턴스에서 변수 변수를 어떻게 사용할 수 있는지 알고 있습니까?

+0

당신이 유식 또는 무언가를 사용하는 SWilk을 ??? '$ {$ nameofmyarra}' – kjy112

+1

@ kjy112 : 읽기 http://php.net/manual/en/language.variables.variable.php –

+1

그것은 가변 변수입니다. IMO는 GOTO만큼 나쁘다. – ThiefMaster

답변

1
foreach($GLOBALS[$nameofmyarray] as $key => $val) { 

하지만 심각하게 .. 가변 변수를 사용하지 마십시오. 특히 변수 이름을 다른 함수로 전달할 때 사용하지 마십시오. 그들은 당신의 코드를 읽기가 어렵게 만들뿐만 아니라 프로그램으로 분석하는 것도 불가능합니다. 왜 그런지 알고 싶다면 이론적 인 컴퓨터 과학에 관심있는 사람에게 물어보십시오.

게다가 일반적으로 배열 (전역 또는 함수 매개 변수로 전달 될 수 있음)은 훨씬 훌륭하고 깨끗합니다. 그냥 디버그 인쇄에 배열하는 방법을 원한다면 그런데

, print_r($array);

+0

+1 왜 그렇게 설명하지 않습니다. :) –

5

기능 doesn't 배열에 액세스 할 수 사용합니다.

function keyValMyArray($nameofmyarray) { 
    global ${$nameofmyarray}; 
    foreach(${$nameofmyarray} as $key => $val) { 
    print "$key: $val<br>"; 
    } 
} 

나 :

function keyValMyArray($nameofmyarray) { 
    foreach($GLOBALS[$nameofmyarray] as $key => $val) { 
    print "$key: $val<br>"; 
    } 
} 

곰 염두에두고,하지만 정확하게 왜을 설명 거기에 너무 많은 이론적 근거는, 이외의가 아니지만 변수 변수 (typically 고려 "나쁜 형태"것을 Javascript에서 eval을 사용하는 것과 같은 다소 지저분한 느낌이 들었음).

사람들이 PHP 전역이 "나쁘다"고 생각하는지 여부에 대해 this SO question을 참조하십시오.

0

$bookPrices은 함수 내에 존재하지 않습니다. 가변 범위에 대한 설명서를 참조하십시오. 당신이 필요는 당신이 global 또는 $GLOBALS 사용해야합니다 이런 식으로 할 경우 http://www.php.net/manual/en/language.variables.scope.php

다른 사람이 지적했듯이. 이것은 모범 사례로 간주되지 않습니다.

1

문제는 변수 변수가 아니라 기능 범위 밖에있는 변수에 액세스하고 있다는 사실입니다. 함수 내부에서 superglobals이라는 함수의 매개 변수와 전역 변수 (문 global $global_variable;) 만 액세스 할 수 있습니다. $ bookPrices 전역 변수는 다음 시도 할 수있는 경우

Pleae 약 variable scope

읽어

function keyValMyArray($nameofmyarray) { 
    global ${$nameofmyarray}; 
    foreach(${$nameofmyarray} as $key => $val) { 
     print "$key: $val"; 
    } 
} 

을하지만 그것은 단지 특별한 경우에 작동합니다 이것은 좋은 방법이 아닙니다 어디 전역 변수를 사용하십시오.

어쩌면 keyValMyArray에 실제 변수를 전달할 수 있고 이름은 전달할 수 없습니까? 좀 더 일반적 일 것입니다.당신이 funciton는 지역 변수도 작동 할 전화 위치를 자리에 변수를 액세스 할 수 있는지 그 방법 :

function keyValMyArray($myarray) {  
    foreach($myarray as $key => $val) { 
     print "$key: $val"; 
    } 
} 

//then use: 
keyValMyArray($bookPrices); 
//or 
$nameOfArray = 'bookPrices'); 
keyValMyArray(${$nameOfArray}); 

안부,