在带有php的foreach中使用的变量



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

最新更新