假设我有一个数组,如下所示:
$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;
输出:
我的博客!
答案 0 :(得分:122)
<?php extract($array); ?>
答案 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中发帖。)
如果数据库中有一个包含许多列的表,那么为每个列创建变量可能会很麻烦。最棒的是你可以自动创建变量!
此方法使用数据库表中列的标题/标题/名称作为变量名称,并将所选行的内容用作变量&#39;值。
当您只从表中选择一个行时,此方法非常适合。我的代码有评论:
$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;
这使您可以更好地控制从数组中提取变量。例如,您只能拉出“第一”和“第二”,而跳过其他。