2011-10-08 41 views
0

我想簡化在PHP中使用自定義函數向某些數組添加東西。陣列沒有被我的函數填充

$campaignLimits = array(); 
$couponLimits  = array(); 
$subscriptions  = array(); 

功能如下:

function DefineSubscription($itemname,$subscription,$campaignlimit,$couponlimit) 
{ 
    // Make em global 
    global $campaignLimits, $couponLimits, $subscriptions; 

    // Add stuff to the arrays 
    $campaignLimits[$itemname]  = $campaignlimit; 
    $couponLimits[$itemname]  = $couponlimit; 
    $subscriptions[$itemname]  = $subscription; 
    return; 
} 

我調用該函數,就像這樣:

DefineSubscription(
        "1", // Item Name/Number 
        1,  // Subscription ID 
        1,  // Campaign Limit 
        30  // Coupon Limit 
        ); 

然而,當我print_r($couponLimits);,我得到Array

函數和數組聲明在require_once的d文件中。

我明顯在做錯事。但是什麼? :)

編輯:通過在DefineSubscription函數本身執行print_r,我得到了正確的輸出。當我包含它時,看起來我的數組並不是全局的?它不應該是?

回答

1

如果您使用全局變量,你應該使用$ GLOBALS ADRESSE他們,以確保您在正確的上下文

$GLOBALS['campaignLimits'] = array(); 
$GLOBALS['couponLimits']  = array(); 
$GLOBALS['subscriptions']  = array(); 

function DefineSubscription() { ... } 

DefineSubscription(...); 

print_r($GLOBALS['campaignLimits']); 

問候托馬斯

+0

我已經做了這種編碼之前,我從未有過$ GLOBALS宣佈他們 - 會盡量嘗試壽。 – Jeff

+0

不需要在$ GLOBALS數組中聲明變量,只需在access:print_r($ GLOBALS ['couponLimits',true) – marcocamejo

+0

從來沒有這樣做過,奇怪:O – Jeff

0

陣列([1] => 30)

我通過print_r'ing $couponLimits ...

以及我把所有在一個頁面雖然...

嘗試調試通過的聲明添加值,和你require_once或嘗試includeprint_r權,而不是...

+0

我有點需要'require_once',因爲..文件是必需的。 ;) – Jeff

0

的問題是範圍。 1)您在主程序中聲明$ couponLimits 2)當您調用函數時,您聲明全局$ couponLimits 3)您在主頁面中調用$ couponLimits,它被引用到本地,而不是全局。

如果您希望您的「主」$ couponLimits爲全局,則必須將其聲明爲全局。

global $campaignLimits; 
global $couponLimits; 
global $subscriptions; 

insted的的

$campaignLimits = array(); 
$couponLimits  = array(); 
$subscriptions  = array();