在PHP中从数组键创建新变量

时间:2011-02-06 22:09:44

标签: php arrays variables

假设我有一个数组,如下所示:

$foo = array('first' =>  '1st',
             'second' => '2nd',
             'third' =>  '3rd');

如何从数组中选择键并使它们成为自己的变量? 例如,数组$foo将变为:

$first = '1st';
$second = '2nd';
$third = '3rd';

我问这个是因为我正在创建一个MVC框架来帮助我的OOP,我希望用户将一个变量传递给View加载函数,这将允许用户在模板中使用变量而不必知道数组的名称是什么。

例如:

$array = array('title' =>  'My blog!' [...]);
$this->load->view('view.php', $array);

view.php:

echo $title;

输出:

  

我的博客!

5 个答案:

答案 0 :(得分:122)

答案 1 :(得分:24)

你可以这样做:

foreach($foo as $k => $v) {
  $$k = $v;
}

答案 2 :(得分:6)

一种简单的方法是使用变量:

foreach($foo as $key => $value) {
   $$key = $value;
}

echo $first; // '1st'

请注意,这通常是不鼓励的。最好更改模板系统以允许变量在模板中作用域。否则你可能会遇到碰撞问题并且必须测试它们的存在等等。

答案 3 :(得分:1)

这确实是my own question的答案,但由于它被标记为重复,I was advised在此处发布我的答案。 (我没有权利在meta中发帖。)

如果数据库中有一个包含许多列的表,那么为每个列创建变量可能会很麻烦。最棒的是你可以自动创建变量!

此方法使用数据库表中列的标题/标题/名称作为变量名称,并将所选行的内容用作变量'值。

当您只从表中选择一个行时,此方法非常适合。我的代码有评论:

$query = "SELECT * FROM mdlm WHERE mdlmnr = $id";  // Select only *one* row, the column mdlmnr is a unique key
$resultat = $conn->query($query); //Get the result (the connection is established earlier)

while ($col = $resultat->fetch_field()) { //fetch information about the columns
    $kolonnetittel = $col->name; //Set the variable as the name of the column
    echo $kolonnetittel . "<br>"; //Show all the column names/variables
}

$innhold = $resultat->fetch_assoc(); // get the content of the selected row as an array (not a multidimensional array!) 
extract($innhold, EXTR_PREFIX_SAME, "wddx"); // Extract the array

由于我没有亲,代码可能不是最好的,但它适用于我:-)当我的网页上出现变量列表时,我将其复制到Excel并使用concatenate来制作php / html / css-code:每个变量的指定类的段落。然后我将这段代码复制回我的网页代码,并移动每一块。在完成之前,我注释掉了这一行:

//echo $kolonnetittel . "<br>"; 

有用的链接:

我希望这个&#34;&#34;教程&#34;可能会帮助别人!

答案 4 :(得分:0)

在PHP 7.1中,您可以使用list() and it's shorthand从数组键创建新变量。

$foo = array('first' =>  '1st',
             'second' => '2nd',
             'third' =>  '3rd');
list('first' => $first, 'second' => $second, 'third' => $third) = $foo;
// $first = '1st'

// or use shorthand
['first' => $first, 'second' => $second, 'third' => $third] = $foo;

这使您可以更好地控制从数组中提取变量。例如,您只能拉出“第一”和“第二”,而跳过其他。