2011-10-08 39 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();