2013-12-11 4 views
0

저는 여러 변수를 호출하는 함수가 있으며 다른 (동적으로 생성 된) 반환 변수를 생성합니다. 좋다.PHP에서 동적으로 생성 된 변수는 종종 변수 이름 대신 "_GET"또는 "_POST"와 같은 이름을 생성합니다.

Moneysystem: 666 
Moneypenny : 007 

이 잘 대부분의 시간을 작동하지만, 때로는 $ James_Bond 같은 만 대신 변수 이름 내가 얻을 :

function showArrayIntersection($ar1, $ar2) { 
    $dynamicName = array_search($ar1, $GLOBALS) . '_' . array_search($ar2, $GLOBALS); 
    global ${$dynamicName}; 
    ${$dynamicName} = implode(array_values(array_intersect($ar1, $ar2))); 
} 

$Bankers = [6,7,0,6,5,6,2]; // `[]` is equivalent to `array()` introduced in PHP 5.4 
$Bond = [6,7,0,5,0]; 
$Politicians = [4,6,1,6,4,6,3]; 
$James = [0,1,0,3,7]; 

showArrayIntersection($James, $Bond); 
showArrayIntersection($Bankers, $Politicians); 
echo "Moneysystem: $Bankers_Politicians\n"; 
echo "Moneypenny : $James_Bond\n"; 

출력 (I이 PHP 5.3 예를 아래에 내 문제를 설명) POST _POST 또는 같은 변수 이름은 이름 대신 제임스 또는 본드를 의미 _GET을 GET PHP 중 하나는 "_GET을 반환 "또는"_POST ".


AbraCadaver는 "전 세계에서 무엇을하고 있습니까?" 여기 내 해결책과 설명 :

Einacio : 첫 번째 함수에서 동적으로 도착했기 때문에 이름을 만들지 않으므로 실제 변수 이름은 실제 이름이 아닙니다.

그리고 AbraCadaver는 array_search()가 배열을 허용하지 않는다고 지적했습니다. 불행히도 내가 간략하게하기 위해서 나는 배열이 아니라 동적 인 다른 변수를 만든다. 나는 너무 복잡하게 만들고 싶지는 않지만 기본적으로 다음과 같이 동작한다 :

function processUsers ($userName , $request2send){ 
     global ${$user.'_'.$request2send}; 
     $url2send = "http...?request=".$request2send ; 
     ... 
     $returnedValue = receivedDataArray();//example elvis ([0] => Presley); 
     ${$user.'_'.$request2send} = $returnedValue; 
     } 
로 첫 번째를 필요로하는 두 번째 함수 -

은 --- 지금은 지금은 루트에있는 함수의 값 ---

$firstValue = processUsers ("cuteAnimal" , "getName"); 
// returns: $cuteAnimal_getName = "Mouse" 

$secondValue = processUsers ("actorRourke" , "getFirstName"); 

// returns: $actorRourke_getFirstName = "Mickey"; 

그리고 이제 안됐다을 얻을완료 : 두 번째 기능은, 훨씬 더 복잡하고 완료 먼저 필요 물론

function combineValues ($firstValue , $secondValue){ 
global ${$firstValue.'AND'.$secondValue}; 
${$firstValue.'_'.$secondValue} = $firstValue." ".$secondValue; 
} 
// returnes $actorRourke_getFirstNameANDcuteAnimal_getName = "Mickey Mouse"; 

하지만 난 당신이 배열은 내가하지만 동적 변수 이름을 전달하는 직접 아니라는 것을 지금 이해할 수 있기를 바랍니다있는 I "firstValue"로만 사용할 수는 없지만 "actorRourke_getFirstName"이라는 이름이 필요했습니다. 그래서 AbraCadaver가 $ GLOBALS [..]를 사용하기 위해서는 어레이가 필요하기 때문에 나에게 도움이되지 못했습니다.

그러나 귀하의 모든 도움에 감사 드리며 문제를 설명해 드릴 수 있기를 바랍니다.

+0

예를 들어 어디에서 작동하지 않습니까? – Stoic

답변

0

변수 이름 만 사용하는 방법은 무엇입니까? 또한 값이 배열을 허용하지 않습니다 array_search()에 대한

function showArrayIntersection($ar1, $ar2) { 
    $dynamicName = $ar1 . '_' . $ar2; 
    global ${$dynamicName}; 
    ${$dynamicName} = implode(array_values(array_intersect($_GLOBALS[$ar1], $_GLOBALS[$ar2]))); 
} 

$Bankers = [6,7,0,6,5,6,2]; // `[]` is equivalent to `array()` introduced in PHP 5.4 
$Bond = [6,7,0,5,0]; 
$Politicians = [4,6,1,6,4,6,3]; 
$James = [0,1,0,3,7]; 

showArrayIntersection('James', 'Bond'); 
showArrayIntersection('Bankers', 'Politicians'); 
echo "Moneysystem: $Bankers_Politicians\n"; 
echo "Moneypenny : $James_Bond\n"; 
+0

감사합니다. 내가 간결하게하기 위해 언급하지 않은 것은 내가 이미 동적으로 생성 된 변수를 전달했기 때문에, 변수 이름이 이미 $ osama_east 또는 $ obama_west라고 불릴 수 있으므로 $ dynamicVariable이라는 이름을 사용할 수 없다는 것입니다. 필자가 끝내 자마자 새로운 검색 자에게 해결책을 제시하는 질문에 내 의견을 추가 할 것입니다. – Thilo

2
  1. 인수 1을 충돌하지 않도록합니다.
  2. print_r($GLOBALS);은 빈 $_GET$_POST 어레이를 표시합니다.
  3. 세계에서 당신은 무엇을하고 있습니까?

는 Einacio로 이동합니다 :

function showArrayIntersection($ar1, $ar2) { 
    $GLOBALS[$ar1 . '_' . $ar2] = implode(array_intersect($GLOBALS[$ar1], $GLOBALS[$ar2])); 
} 

showArrayIntersection('James', 'Bond'); 
echo "Moneypenny : $James_Bond\n"; 

당신은 그들이 물론 isset()의 존재 확인 확인할 수 있습니다.

+0

array_search() needle에 배열을 사용할 수 없다는 것이 어디 있습니까? – Einacio

+3

4. 오 하나님 왜? 5. 그만하십시오. – Sammitch

+0

아니지만 숫자 나 문자열이 필요합니다. – AbraCadaver