我正在尝试创建一个函数来创建一组像这样的数组
的变量function breakDownPOSTArray($count, $fields) {
$repeat = 1;
$num = 0;
while ($repeat <= $count) {
$a = "array" . $repeat;
$$a = array_slice($_POST, $num, $fields);
$repeat ++;
$num += 4;
}
我希望能够在函数之外使用这些变量。就目前而言,我正在声明函数之外的变量并将它们全局拉入,但感觉它正在击败对象并且我重复自己太多了。
有没有更好的方法来解决我想要的东西,而忽略了函数之外的变量?
答案 0 :(得分: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(..., ...));
答案 1 :(得分:0)
没有。函数中定义的变量在堆栈中创建,并且在函数返回后它们不再存在。
答案 2 :(得分:0)
假设你有充分的理由去完成你想要的......
变化
$a = "array" . $repeat;
$$a = array_slice($_POST, $num, $fields);
到
$GLOBALS["array" . $repeat] = array_slice($_POST, $num, $fields);
...对于一个错综复杂的设计感觉就像我一样,但是我看不到足够的代码来说明这一点。
答案 3 :(得分:0)
您可以将变量声明为全局变量,例如:
$sxml = new SimpleXMLElement('<somexml/>');
function foo(){
global $sxml;
$child = $sxml->addChild('child');
}
foo();