我知道这似乎应该通过设计来避免,但我们只是说它非常需要:是否可以在初始化时引用属于某个值的键?
这是我想象的(不完全是我需要它的情况,但关键也是原始的):
$array = array(25 => "My key is " . $this->key);
我需要这个,因为数组键用于每个值。实际上,该值是另一个数组,该数组具有使用第一个数组键的值。就像我在评论中说的那样,我想让它保持干燥。这样做没问题,但我想把它做好;)
如果您自己编写数组,则可以将键值放入数组值中,例如:
$array = array(25 => "My key is 25");
如果您已经有一个数组,您可以使用 aforeach
并将所有键添加到它的值中:
foreach($array as $key => $value) {
$array[$key] = sprintf('%s %s', $value, $key);
}
或者,如果您只想拥有现有数组的键数组,则可以使用array_flip来维护 key=>value,但要翻转键和值。或者,如果您只想要一个键数组,您可以使用array_keys 。
做你想要的:在某个地方初始化一个数组,不要在它的值上添加任何键,你可以实现ArrayAccess,Countable并具有:
public function offsetGet($offset) {
return isset($this->container[$offset])
? $this->container[$offset] . ' ' . $offset
: null;
}
或类似的东西。但在这种情况下,您需要一个包含此数组的变量作为您的ArrayAccess
实现实例。并且根据此类的使用情况,您可能需要实现更多接口。
不,在定义值时无法引用键。除了可能编写一个将它嵌入到字符串中的预处理器。但这仅适用于原始值。