Php 在其值中引用数组键
我知道这似乎应该通过设计来避免,但让我们说这是非常需要的: 是否可以在初始化时引用属于某个值的键 下面是我想象中的情况(不是我需要它的情况,但键也是原始的):Php 在其值中引用数组键,php,arrays,key-value,Php,Arrays,Key Value,我知道这似乎应该通过设计来避免,但让我们说这是非常需要的: 是否可以在初始化时引用属于某个值的键 下面是我想象中的情况(不是我需要它的情况,但键也是原始的): 我需要这个,因为数组键用于每个值。实际上,该值是另一个数组,其中使用了第一个数组键。就像我在评论中说的,我想保持干燥。做这件事没问题,但我想把它做好;) 如果您自己编写数组,您可以将键值放入数组值中,如下所示: $array = array(25 => "My key is 25"); 如果您已经有一个数组,您可以使用foreac
我需要这个,因为数组键用于每个值。实际上,该值是另一个数组,其中使用了第一个数组键。就像我在评论中说的,我想保持干燥。做这件事没问题,但我想把它做好;) 如果您自己编写数组,您可以将键值放入数组值中,如下所示:
$array = array(25 => "My key is 25");
如果您已经有一个数组,您可以使用foreach
并将所有键添加到它的值中:
foreach($array as $key => $value) {
$array[$key] = sprintf('%s %s', $value, $key);
}
或者,如果您只想拥有一个现有数组的键数组,那么您可以在想要维护key=>value,但要翻转键和值的情况下使用。或者,如果只需要一组键,也可以使用
要实现您想要的:在某个地方初始化数组,不要向其值添加任何键,您可以实现,并且:
public function offsetGet($offset) {
return isset($this->container[$offset])
? $this->container[$offset] . ' ' . $offset
: null;
}
或者类似的事情。但是在这种情况下,您需要有一个包含此数组的变量作为
ArrayAccess
实现的实例。根据此类的使用情况,您可能需要实现更多接口。如果您自己编写数组,您可以将键值放入数组值中,如:
$array = array(25 => "My key is 25");
如果您已经有一个数组,您可以使用foreach
并将所有键添加到它的值中:
foreach($array as $key => $value) {
$array[$key] = sprintf('%s %s', $value, $key);
}
或者,如果您只想拥有一个现有数组的键数组,那么您可以在想要维护key=>value,但要翻转键和值的情况下使用。或者,如果只需要一组键,也可以使用
要实现您想要的:在某个地方初始化数组,不要向其值添加任何键,您可以实现,并且:
public function offsetGet($offset) {
return isset($this->container[$offset])
? $this->container[$offset] . ' ' . $offset
: null;
}
或者类似的事情。但是在这种情况下,您需要有一个包含此数组的变量作为
ArrayAccess
实现的实例。根据此类的使用情况,您可能需要实现更多接口。否,在定义值时无法引用键。除了编写一个将其嵌入字符串的预处理器。但这只适用于基本值。不,定义值时无法引用键。除了编写一个将其嵌入字符串的预处理器。但这只适用于基本值。输出是什么样的?这是一个关联数组还是一个常规数组(即带有0..n的键)?为什么不这样做呢数组(25,…)
?它是一个关联数组。在我之前开发的程序中存在糟糕的设计,现在我必须修复它。我认为你在这里问的是一种实现你的解决方案的方法,而不是你的实际问题。你认为你需要这个是有原因的,如果你可以添加它(而不是“糟糕的设计”),我们可以帮助你找到一个实际的解决方案。输出是什么样子的?这是一个关联数组还是一个常规数组(即带有0..n的键)?为什么不这样做呢数组(25,…)
?它是一个关联数组。在我之前开发的程序中存在糟糕的设计,现在我必须修复它。我认为你在这里问的是一种实现你的解决方案的方法,而不是你的实际问题。你认为你需要这个是有原因的,如果你可以加上这个(而不是“糟糕的设计”),我们可以帮助你找到一个实际的解决方案。我想继续尝试,这就是为什么不喜欢1(我为什么要问这个问题)。2不是一个选项,因为我想在初始化数组时执行此操作。然后在初始化数组的位置添加一个键值。哎呀,我想写“DRY”而不是try。我不想裁员,我想继续尝试,这就是为什么我不喜欢1(我为什么要问这个问题)。2不是一个选项,因为我想在初始化数组时执行此操作。然后在初始化数组的位置添加一个键值。哎呀,我想写“DRY”而不是try。我不想裁员。