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

Posted

技术标签:

【中文标题】在 PHP 中从数组键创建新变量【英文标题】:Create new variables from array keys in PHP 【发布时间】:2011-06-22 10:30:09 【问题描述】:

假设我有一个数组,像这样:

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

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

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

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

例如:

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

view.php:

echo $title;

输出:

我的博客!

【问题讨论】:

P.S.示例来自codeIgniter 对 这与问题无关。在其他一些情况下,如果您有较小的具有相同顺序的值数组,您还可以通过 list() 分配它们,这对 IDE 更友好。 $info = array('coffee', 'brown', 'caffeine'); list($drink, $color, $power) = $info; 用新变量中的冗余数据使全局范围膨胀并没有真正的好处。只需在您想使用$title 的每个地方使用$array['title']。使用extract() 或可变变量通常表示编码设计欠佳。当这些技术对您的代码有吸引力时,通常是重新考虑的时候了。 【参考方案1】:

在 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;

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

【讨论】:

【参考方案2】:

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

当您在数据库中有一个包含许多列的表时,为每个列创建一个变量可能会很麻烦。最棒的是你可以自动生成变量!

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

当您只从表中选择 一个 行时,此方法适用。我的 cmets 代码:

$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 中并使用连接来制作 php/html/ css-code:为每个变量指定类的段落。然后我将这段代码复制回我的网页代码中,并移动了每一块。在完成之前,我注释掉了这一行:

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

有用的链接:

W3 School on fetch_field PHP on fetch_field PHP on Extract W3 School on Extract Video tutorial: Inserting database results into array in PHP

我希望这个“教程”可以帮助其他人!

【讨论】:

【参考方案3】:
<?php extract($array); ?>

http://php.net/manual/en/function.extract.php

【讨论】:

【参考方案4】:

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

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


echo $first; // '1st'

请注意,通常不鼓励这样做。最好更改您的模板系统以允许在模板内限定变量。否则,您可能会遇到碰撞问题,并且必须测试它们的存在等。

【讨论】:

【参考方案5】:

你可以这样做:

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

【讨论】:

以上是关于在 PHP 中从数组键创建新变量的主要内容,如果未能解决你的问题,请参考以下文章

php:如何从数字索引中获取关联数组键?

在php中从另一个数组创建一个数组[关闭]

PHP 数组

如何在javascript中从现有数组创建一个新数组

如何在 PHP 中从具有 2 个计数的数组创建 2 个集合?

在 Wordpress Admin 中从 PHP 数组创建“下载到 CSV”按钮