-1

我正在尝试创建一个函数来创建一组像这样的数组的变量

function breakDownPOSTArray($count, $fields) {
    $repeat = 1;
    $num = 0;   
    while ($repeat <= $count) {
        $a = "array" . $repeat;
        $$a = array_slice($_POST, $num, $fields);
        $repeat ++;
        $num += 4;
    }

我希望能够在函数之外使用这些变量。就目前而言,我在函数外部声明变量并将它们全局拉入,但感觉就像它正在击败对象,我重复自己太多了。

有没有更好的方法来实现我想要的而不清除函数外部的变量?

4

4 回答 4

1

您可以做的是返回一个数组和extract()函数的返回值。

function breakDownPOSTArray($count, $fields) {
    $repeat = 1;
    $num = 0;
    $array = array();
    while ($repeat <= $count) {
        $array["array" . $repeat] = array_slice($_POST, $num, $fields);
        $repeat++;
        $num += 4;
    }
    return $array;
}

// To call it:
extract(breakDownPOSTArray(..., ...));
于 2013-04-18T17:47:22.470 回答
0

不,函数中定义的变量是在堆栈中创建的,并且在函数返回后它们不再存在。

于 2013-04-18T17:45:23.653 回答
0

假设你有充分的理由来完成你正在寻找的东西......

改变

$a = "array" . $repeat;
$$a = array_slice($_POST, $num, $fields);

$GLOBALS["array" . $repeat] = array_slice($_POST, $num, $fields);

...感觉就像我对一个复杂的设计,但我看不到足够的代码来肯定地说。

于 2013-04-18T17:50:47.153 回答
0

您可以将变量声明为全局变量,例如:

$sxml = new SimpleXMLElement('<somexml/>');

function foo(){
    global $sxml;
    $child = $sxml->addChild('child');
}

foo();

来源: 无法访问函数内的全局变量

于 2013-04-18T17:58:24.133 回答