Php 如何设置依赖于键名的数组值
我对PHP有点陌生,所以问题可能很明显,但是 是否可以创建一个数组,并使用wierd示例中的键名分配其值Php 如何设置依赖于键名的数组值,php,arrays,Php,Arrays,我对PHP有点陌生,所以问题可能很明显,但是 是否可以创建一个数组,并使用wierd示例中的键名分配其值 $arr = array ( "foo" => $this_key_name." some text added", "bar" => $this_key_name." some text added", "foobar" => "this is left unchanged", ) 当然,我所说的$this_key_name是指一些包含键的“想象
$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()
中循环,将它们留空并设置值的想法似乎可以,但如果不是每个元素都需要处理,则需要额外检查
因此问题是:是否存在任何包含当前数组键名的属性,这些属性可以在赋值过程中访问?一个词的答案是否 您可以使用某些占位符并在以后替换它,或者使用辅助函数,例如:
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'];
当然,这样做意味着您不能再静态初始化数组(例如,在声明类属性时,这将不起作用),但是,即使有一些内置的机制可以提供帮助,您也会有同样的缺点。在PHP中无法做到这一点,因为在您尝试读取
此\u key\u 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);
});
可以使用变量作为键名,但不能引用键名。像这样:
$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';
}
在这种情况下,使用替换的字符串模式是我能想到的最好的解决方案。另外,它是检查真/假条件是否更改值的一个很好的旁路。非常感谢。