我对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”和“bar”的键,它确实没有麻烦。但是他们说他们的数量超过20并且它们不是那么短。复制这样的模板值比重新输入每个模板要容易得多,是吗?
在将foreach()
循环后,将它们留空并设置值的想法似乎没问题,但如果不是每个元素都要处理,则需要额外检查。
所以问题是:是否存在任何包含当前数组的键名的属性,可以在赋值时访问它?
答案 0 :(得分:0)
单字答案是否。
您可以使用一些占位符并在之后替换它,或者使用辅助函数,例如:
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'];
当然,走这条路线意味着你不能再静态地初始化数组(例如,在声明一个类属性时这不起作用),但是即使有一些内置的机制可以帮助你也会有同样的缺点。
答案 1 :(得分:0)
由于在您尝试阅读this_key_name
时实际上并未创建数组键,因此无法在PHP中执行此操作。相反,我会选择foreach
循环,这仍然相对简单。
$arr = array(
"foo" => '$this_key_name some text added'
);
array_walk($arr, function (&$value, $key) {
$value = str_replace('$this_key_name', $key, $value);
});
答案 2 :(得分:0)
您可以将变量用作键名,但不能引用键名。像这样:
$name1 = 'foo';
$name2 = 'bar';
$name3 = 'baz';
$array = array(
$name1 => $name1.'string 1',
$name2 => $name2.'string 2',
$name3 => $name3
);
答案 3 :(得分:0)
没有内置属性可以反映分配时的密钥名称。
您最简单的解决方案可能是 - 正如您可能已经猜到的那样 - 构建数组然后循环以进行分配。
foreach($arr as $key => $value) {
$arr[$key] = $key . ' some text added';
}