PHP从变量创建单例数组,键名作为变量名

时间:2014-03-06 18:14:24

标签: php arrays codeigniter

我发现我必须在PHP中做很多事情:获取存储在变量中的值,并将此值放在一个数组中,其中的键与变量名称相同。这种模式经常出现在CodeIgniter中,但这不是CI特定的问题。

我的意思是我经常要这样做:

$logs = //get logs from db
$this->load->view( 'showLogs', array('logs'=>$logs) ); //load a CI view

所以我的问题是,是否有一个神奇的功能/我们能编写一个神奇的功能,通过简化这个过程来节省一些击键并提高清晰度吗?

我想要的是:

$arr = my_magic_function($logs)
// $arr = array('logs'=>$logs);

我可能会将此功能称为#34; array_self",可能缩写为" a_self"对我而言,它会更好地阅读。我的错误就是必须在我的例子中输入名称" logs",两次,因为这可能是令人沮丧的拼写错误的来源。

2 个答案:

答案 0 :(得分:1)

您可以使用内置函数compact()完成此操作。

假设您有一个变量$logs,您可以通过调用:

来创建一个数组
compact("logs");

示例:https://eval.in/114710

$logs = "there was a blahbalh";

$ary = compact("logs");

var_dump($ary);

返回:

array(1) {
  ["logs"]=>
  string(20) "there was a blahbalh"
}

答案 1 :(得分:0)

php中的函数通常has no access到外部变量。因此,您需要以某种方式提供访问权限。

function magic_array_wrapped($name) {
    $a = array();
    $a[$name] = $GLOBALS[$name];
    return $a;
}

用法:magic_array_wrapped('logs')

也许,它会以这种方式工作,但我不确定:

function magic_array_wrapped($name) {
    global $$name;
    $a = array();
    $a[$name] = $$name;
    return $a;
}
PS:很难说,这是否是您架构中的问题,但是有这样的需求是一个标志,您需要修改架构。