2013-12-11 93 views
0

我有一個函數,我可以從中調用多個不同的變量,並生成另一個(動態創建的)返回變量。 一切都好。 (我解釋一下下面這個PHP 5.3例如我的問題)在PHP中動態創建變量偶爾會生成名稱,如「_GET」或「_POST」而不是變量名稱

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"; 

輸出:

Moneysystem: 666 
Moneypenny : 007 

這工作的大部分時間很好,但有時只,而不是一個變量名稱,如$ James_Bond我得到像POST _POST或變量名GET _GET,而不是意名的詹姆斯債券 PHP返回無論是「_GET 「或」_POST「。


自從AbraCadaver充滿懇切地問道:「你在做什麼? 這裏我的解決方案和解釋:

Einacio:我coudn't動態地創建名稱,因爲已經從第一個函數動態到達,所以實際的變量名稱不是真正的名稱。

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"; 

課程的第二功能要複雜得多,需要首先完成, 但我希望你現在能理解,這不是一個數組直接,我傳給而是動態的變量名,我不能僅僅用作「firstValue」,但我需要名字「actorRourke_getFirstName」。 所以AbraCadaver建議使用$ GLOBALS [..]不適用於我,因爲它需要數組。

但是:感謝您的幫助,我希望現在可以向您解釋問題。

+0

你能告訴我們一個例子,它不起作用嗎? – Stoic

回答

0

如何使用變量的名稱?它也將避免衝突值

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

謝謝。爲簡潔起見,我沒有提到的是,我已經傳遞了動態創建的變量,所以我不能使用名稱$ dynamicVariable,因爲變量名稱可能已被稱爲$ osama_east或$ obama_west。一旦我完成它,我將在問題中添加我的評論,向新的搜索者展示解決方案。 – Thilo

2
  1. 參數1用於array_search()不接受的陣列。
  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()針? – Einacio

+3

4.噢,上帝爲什麼? 5.請停止。 – Sammitch

+0

它不,但需要一個數字或字符串。 – AbraCadaver