我对PHP有点陌生,所以这个问题可能很明显,但。。
是否可以创建一个数组并使用键的名称分配其值,如下面的示例中所示
$arr = array (
"foo" => $this_key_name." some text added",
"bar" => $this_key_name." some text added",
"foobar" => "this is left unchanged",
)
当然,我所说的$this_key_name是指一些"想象和期望的属性",它包含密钥,即表示密钥的字符串。
只有几个类似于"foo"answers"bar"的键,这真的不会造成麻烦。但假设它们的数量在20以上,它们就不那么短了。复制粘贴这些模板化的值会比重新键入每个值容易得多,嗯?
将它们留空并在之后设置值,循环通过foreach()
的想法似乎可以,但如果不是每个元素都应该处理,则需要额外的检查。
因此,问题是:是否存在任何包含当前数组键名的属性,这些属性可以在值的赋值过程中访问
在PHP中无法做到这一点,因为数组键实际上并不是在您尝试读取this_key_name
时创建的。相反,我会选择foreach
循环,它仍然相对简单。
$arr = array(
"foo" => '$this_key_name some text added'
);
array_walk($arr, function (&$value, $key) {
$value = str_replace('$this_key_name', $key, $value);
});
一个字的答案是否。
您可以使用一些占位符,然后替换它,或者使用辅助函数,例如:
function makeItems(array $keys, $valueFormat)
{
$result = [];
foreach ($keys as $key) {
$result[$key] = sprintf($valueFormat, $key);
}
return $result;
}
现在您可以使用获得所需的结果
$arr = makeItems(["foo", "bar"], "%s some text added") +
['foobar' => 'this is left unchanged'];
当然,走这条路意味着你不能再静态地初始化数组(例如,在声明类属性时这将不起作用(,但即使有一些内置机制可以帮助你,你也会有同样的缺点。
您可以使用变量作为键名称,但不能引用键名称。像这样:
$name1 = 'foo';
$name2 = 'bar';
$name3 = 'baz';
$array = array(
$name1 => $name1.'string 1',
$name2 => $name2.'string 2',
$name3 => $name3
);
没有内置属性可以在分配时反映键名。
最简单的解决方案可能是——正如您可能已经猜到的那样——构建数组,然后循环进行赋值。
foreach($arr as $key => $value) {
$arr[$key] = $key . ' some text added';
}