1

我知道这似乎应该通过设计来避免,但我们只是说它非常需要:是否可以在初始化时引用属于某个值的键?

这是我想象的(不完全是我需要它的情况,但关键也是原始的):

$array = array(25 => "My key is " . $this->key);

我需要这个,因为数组键用于每个值。实际上,该值是另一个数组,该数组具有使用第一个数组键的值。就像我在评论中说的那样,我想让它保持干燥。这样做没问题,但我想把它做好;)

4

2 回答 2

1

如果您自己编写数组,则可以将键值放入数组值中,例如:

$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 。

做你想要的:在某个地方初始化一个数组,不要在它的值上添加任何键,你可以实现ArrayAccessCountable并具有:

public function offsetGet($offset) {
    return isset($this->container[$offset]) 
                ? $this->container[$offset] . ' ' . $offset 
                : null;
}

或类似的东西。但在这种情况下,您需要一个包含此数组的变量作为您的ArrayAccess实现实例。并且根据此类的使用情况,您可能需要实现更多接口。

于 2013-01-09T09:41:57.460 回答
0

不,在定义值时无法引用键。除了可能编写一个将它嵌入到字符串中的预处理器。但这仅适用于原始值。

于 2013-01-09T09:44:00.970 回答