【问题标题】:How to go back to parent array in a reference? [duplicate]如何在引用中返回父数组? [复制]
【发布时间】:2014-06-07 02:02:44
【问题描述】:
$a = [ 

  [

    [

    ]


  ],

  [

    [

    ]

  ]

];

如果我引用了数组深处的一个元素,例如:

$ref = &$a[1][1]; 

我怎样才能回到父数组,在这种情况下&$a[1]

我通过增加或减少的计数器变量来分配引用。当我减少时问题就来了,然后我需要回到父数组:(

我想我明白了:

      $new_ref = &$a;
      $i = 0;
      while($i < $counter - 1){
        $new_ref = &$new_ref[count($new_ref) - 1];
        $i++;
      }  

      $ref = &$new_ref;

但它似乎无法正常工作,哈哈。 不知道为什么,逻辑没问题。我正在使用新的参考来爬上阵列直到接近最后一层:/

【问题讨论】:

  • 数组不知道它们所在的父数组。如果你想跟踪这种关系,你必须自己做,也许使用递归数据结构。

标签: php arrays reference


【解决方案1】:

一个人不能像这样“回去”。

子数组隐式知道父数组的,是否引用。

要创建这样的 循环依赖 需要显式建立循环 - 通常这样做是使用自定义类(例如,控件具有父控件和许多子控件)而不是数组.

我会尽量避免这样的循环图并重新设计设计 - 这是因为感觉(尤其是在没有实际用例的情况下)这种方法会产生不必要的复杂性。

【讨论】:

  • “我建议避免使用这样的代码” --- 有什么特别的问题吗?
  • 我认为它可以通过某种 eval 但不知道该怎么做
  • @thelolcat 不可能立即返回,因为信息只是......丢失了。这就像询问哪些变量(不是引用)包含特定值。可以搜索特定数组的对象图以找到父对象(就像可以搜索所有已知变量的特定值一样),但这在程序设计中应该是不必要的。
【解决方案2】:

数组是简单的东西。我们可以将许多变量放入一个数组中,我们甚至可以命名我们存储这些信息的位置 - 但它们在对象意义上彼此不相关。

用于访问数组中数据的结构只是为了让阅读代码的人更直观。

数组的任何元素实际上只是具有特定地址的信息的sn-p。虽然认为一个信息位在一个数组中可能是直观的,而该数组在另一个数组中 - 它真正意味着发生的是数组的一部分内的信息更复杂并且可以更精确地访问.

另一方面,类和对象...这是父/子关系可以并且确实发生的地方。

引用传递也不例外:

$ref = &$a[1][1]; 

简单地说 - 对$ref 的任何更改都是对$a[1][1] 的更改。无论是在函数中(通常会使其超出范围),还是只是在其余代码中编写变量 $a[1][1] 的一种更短的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2018-06-13
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    相关资源
    最近更新 更多