PHP:自引用数组

41

有没有一种方法可以在数组内部引用数组键?这在代码格式中可能更容易理解:

$array=array(
  "Key1"=>array(
    "Value1",
    "Value2"
  ),
  "Key2"=>&$this['Key1']
);

我想要$array['Key2']的输出与$array['Key1']相同。 我可以在创建数组之后添加$array['Key2']=&$array['Key1'];,但如果可能的话,我希望将其全部放在一个代码块中。

我已经查阅了关于引用的文档,以及一些类似问题的建议和搜索“php数组引用”。


6
不行。在创建数组时,还没有可能的参考点。因此您必须在之后添加参考。 - mario
1
对于一个有趣的问题,点赞加一 :-) - gen_Eric
1
除非您引用已经存在的东西,否则没有办法在一条语句中完成它。因此,您可以创建$ref = array("Value1", "Value2"); 然后执行 $array = array('Key1'=>&$ref, 'Key2'=>&$ref); 并在此之后使用 unset($ref); - 但是这没有意义,您可以直接按照您建议的方式创建引用。 - DaveRandom
4
我对使用方法感到好奇。您能否提供一些背景信息吗?在什么情况下需要使用它?这只是为了参考,但也许可以突显出与您需求不同的替代方案。 - Ian Wood
1
用途是为一个潜在的迷你游戏添加到项目中。如果角色左手持有武器而右手空着,他们的类别与左手持有武器和右手持有盾牌时相同。$class=array( "W"=>array( "S"=>array( /*找出类别*/ ), "N"=>&$class['W']['S'] ) );这就是计划。 - user1262516
显示剩余2条评论
2个回答

31

事实证明,答案是肯定的。但它并不是一种整洁的语法,因为它使用了一种类似于子语句的形式,并在当前范围内留下了一个额外的参考变量。

考虑以下代码:

<?php

  $array = array(

    // Creates Key1 and assigns the value to it
    // A copy of the value is also placed in $ref
    // At this stage, it's not a reference
    "Key1"=>($ref = array(
      "Value1",
      "Value2"
    )),

    // Now Key2 is a reference to $ref, but not to Key1
    "Key2"=>&$ref,

    // Now everything is referenced together
    "Key1"=>&$ref

  );

我很惊讶这个操作没有报错,但事实确实如此 - 这是证明。当然,你不应该这样做,但你可以……


1
+1这个方法有效是因为在数组中重复声明同一个键时,它将覆盖第一个。 :-) - gen_Eric
1
的确,这似乎是情况,我曾经想过它是否会抱怨,因为这似乎是一件很奇怪的事情,而且我以前从未尝试过。显然,人们通常会单独重新分配数组中的键,但很少在声明语句中这样做! - DaveRandom
@Starx:删除注释和空格。这只是一个语句。 - gen_Eric
@Starx 技术上来说这是两个语句,但嵌套在一个中。 - DaveRandom
@DaveRandom:这算是一行代码了 :-) - gen_Eric
1
感谢您抽出时间发帖。看起来它能够解决问题,并且易于操作,以至于我不会忘记我在x年后正在做的事情。 - user1262516

1
无法在一个块中完成,因为您尚未初始化变量。类变量也是如此。要做这样的事情,您需要创建任何变量,然后仅使用其链接,但它会使用内存,因此再次回答您的问题是 - 不可能 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接