【发布时间】:2022-02-08 16:33:43
【问题描述】:
在as 之后的经典foreach() 循环中,是否可以将key 变量用作value 变量的一部分,反之亦然?
*经过十多年的PHP开发,这种可能性我才刚刚想到去调查。
【问题讨论】:
标签: php foreach key variable-assignment key-value
在as 之后的经典foreach() 循环中,是否可以将key 变量用作value 变量的一部分,反之亦然?
*经过十多年的PHP开发,这种可能性我才刚刚想到去调查。
【问题讨论】:
标签: php foreach key variable-assignment key-value
foreach() 总是在分配 key 变量之前分配 value 变量。 (Demo)
这似乎有点违反直觉,因为$v 在视觉上似乎是在声明之后它是通过key 声明访问的。
这意味着您可以安全地使用:
$array = ['a', 'b'];
$result = [];
foreach ($array as $result["prefix_$v"] => $v);
var_export($result);
生产:
array (
'prefix_a' => 0,
'prefix_b' => 1,
)
新生成的数组有基于原值的前缀键,原索引成为新值。
如果没有在字符串前面添加prefix_,则操作实际上与array_flip() 相同。
反转分配以使value 变量接收key 无法按预期工作。您可能希望生成["prefix_0", "prefix_1"],但它不会,并且由于尝试访问未声明的变量,它还会生成通知/警告。 (投诉只针对第一次迭代,因为在第一次迭代之后,$k 被声明——它是前一次迭代的键。)
$array = ['a', 'b'];
$result = [];
foreach ($array as $k => $result["prefix_$k"]);
// not defined on first iteration -------^^
var_export($result);
坏输出:
Warning: Undefined variable $k in /in/iVm1u on line 6
array (
'prefix_' => 'a',
'prefix_0' => 'b',
)
对于其他上下文,我将提供另一个工作示例,该示例使用该值生成一个多维数组,以确定输出数组中的数组键。 (Demo)
$array = [2, 3, 5];
$result = [];
foreach ($array as $result[$v * $v][$v] => $v);
var_export($result);
输出:
array (
4 =>
array (
2 => 0,
),
9 =>
array (
3 => 1,
),
25 =>
array (
5 => 2,
),
)
【讨论】:
list() - 3v4l.org/JCSIi
array_flip() 和array_column() 的融合。