如何设置依赖于其键名的数组值

时间:2014-04-30 13:50:11

标签: php arrays

我对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()循环后,将它们留空并设置值的想法似乎没问题,但如果不是每个元素都要处理,则需要额外检查。

所以问题是:是否存在任何包含当前数组的键名的属性,可以在赋值时访问它?

4 个答案:

答案 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';
}