我在PHP中有这个数组:
$formats = array('100x100', '200x200', '300x300');
在foreach过程中,我需要填充变量$html_100x100
:
foreach($formats as $format) {
$html_100x100 = 'datas';
}
如何使变量$html_100x100
为动态的,以每个格式创建一个变量(基于formats
数组(?
这就是我尝试过的:
foreach($formats as $format) {
${'html_{$format}'} = 'datas';
}
谢谢。
每当您认为需要像这样动态命名变量时,您可能需要的是一个数组。
$formats = array('100x100', '200x200', '300x300');
$html = [];
foreach($formats as $format) {
$html[$format] = 'datas';
}
这不是变量,而是一个动态变量名。您可以将变量值附加到字符串中,如下所示:
$formats = array('100x100', '200x200', '300x300');
foreach($formats as $format) {
${'html_' . $format} = 'datas';
}
数组解决方案更可取,但这应该能回答问题。无法找到所有$html_
变量。其中,作为print_r
和/或foreach
可以在阵列上使用。
声明部分由字符串定义的变量名被认为是个坏主意。如果你升级它,这可能会产生大量不同的全局变量。
您想在这里执行的操作可以使用关联数组(使用字符串键而不是索引的数组(来完成。
你可以这样做:
$htmlFormats = array();
foreach($formats as $format) {
$htmlFormats[$format] = 'datas';
}
之后,每个$格式都将是一个密钥,您可以使用它来访问关联数组中的值,如下所示:
echo $htmlFormats['100x100'];
使用大括号可以创建一个变量名"动态的";在运行时。你的尝试几乎是正确的,但确实奏效了,因为单引号不像双引号那样插入字符串。
即使这是有效的,使用数组还是更好的做法。以这种方式创建变量可能会影响意外行为。
$formats = array('100x100', '200x200', '300x300');
foreach ($formats as $format) {
${"html_$format"} = $format;
}
var_dump($html_100x100);
输出
string(7) "100x100"
试试这个
$aa = [];
$formats = array('100x100', '200x200', '300x300');
foreach ($formats as $val) {
$aa['html_' . $val] = $val;
}
extract($aa);
echo($html_200x200);
希望它能有所帮助,也可以阅读PHP Extract