如何将数组传递给另一个函数内的函数

时间:2013-09-11 18:12:00

标签: php arrays codeigniter function parameters

我构建了一个函数来为数组充电一些值。问题是我需要从另一个函数获取该数组(在函数内部)。

不知道如何处理参数。

这是我为我的阵列充电的功能:

public function loadStates(){
    $states = array(
        "Buenos Aires" => "label label-success",
        "Catamarca" => "label label-info",
        "Chaco" => "label label-warning",
        "Chubut" => "label label-danger";
    );

    return $states;
}

这是另一个函数(我假装调用创建数组的函数,以便我可以加载要在当前函数中使用的数据):

public function countUsers() {
    //breadcrumb
    $this->data["states"] = loadStates();
    var_dump('$this->data["states"]');die();
    //$this->data['totUsers'] = UsersDs::getInstance()->count();
    //$this->parser->parse('admin/usuarios/totales/totalRegUsers.tpl',$this->data);
} 

这些函数在同一个php文件中。我已经删除了所有的函数参数,所以显然这不起作用

2 个答案:

答案 0 :(得分:1)

我有两个选项,我马上就会看到(真的有更多,但很难知道你的情况最好)。您可以通过引用方法传递数组,也可以从loadStates()方法返回新数组。

方法1:通过参考传递

public function loadStates(&$arr) {
    $arr = array(
        "Buenos Aires" => "label label-success",
        "Catamarca" => "label label-info",
        "Chaco" => "label label-warning",
        "Chubut" => "label label-danger"
    );
}

public function countUsers(){
    $this->loadStates($this->data["states"]);
    var_dump($this->data["states"]);die();
} 

方法2:返回新数组

public function loadStates() {
    return array(
        "Buenos Aires" => "label label-success",
        "Catamarca" => "label label-info",
        "Chaco" => "label label-warning",
        "Chubut" => "label label-danger"
    );
}

public function countUsers(){
    $this->data["states"] = $this->loadStates();
    var_dump($this->data["states"]);die();
} 

答案 1 :(得分:0)

你有几种选择....

1)从第一个函数

返回数组
public function loadStates(){
return array(
    "Buenos Aires" => "label label-success",
    "Catamarca" => "label label-info",
    "Chaco" => "label label-warning",
    "Chubut" => "label label-danger";
             );
}

每次调用loadStates时,这将重新创建并返回一个数组。

2)在函数中使用静态赋值然后返回。

public function loadStates(){
static $states = array(
    "Buenos Aires" => "label label-success",
    "Catamarca" => "label label-info",
    "Chaco" => "label label-warning",
    "Chubut" => "label label-danger";
             );
    return $states;
}

这将在第一次调用函数时创建数组,并在后续调用中返回存储的副本。

3)在构造对象期间将$ states分配给属性,并使用属性访问器获取数组

public function __construct(){
$this->states = array(
    "Buenos Aires" => "label label-success",
    "Catamarca" => "label label-info",
    "Chaco" => "label label-warning",
    "Chubut" => "label label-danger";
             );
}

然后在你的代码中

$this->data["states"] = $this->states();

4)在构造中懒惰地加载静态属性。

static protected $states;

public function __construct(){
if (!is_array(self::$states)) 
    self::$states = array(
    "Buenos Aires" => "label label-success",
    "Catamarca" => "label label-info",
    "Chaco" => "label label-warning",
    "Chubut" => "label label-danger";
    );
}

然后,当您想要使用这样的使用语法访问该属性时:

self::$states["Buenos Aires"]

还有其他几个选项,但应该使用的选项完全取决于您的特定用例。