猿问

在 PHP 中有一个引用自身的数组

我想在 php 中实现这一点——但是否可能,如果可能,如何实现?


一个包含两个元素的数组,第一个是嵌套数组的数组(内容和深度未知,你只知道每个数组都有一个 id),第二个是对第一个元素中每个数组的引用的数组。是这样的:


$all = Array (

  'nested_arrays' => Array(

    'id0' => Array(

      'id8' => Array(

        ...

      )...

    )...

  'references' => Array(

    'id0' => (reference to Array id0),

    'id8' => (reference to Array id8),

    ...

  )

)

然后你可以在不知道它在哪里的情况下访问每个数组,比如


$all['references']['id8']


你甚至可以做


unset($all['references']['id8'])


...是的,或者你可以吗?


慕的地6264312
浏览 132回答 2
2回答

翻过高山走不出你

您可以通过将引用存储在数组的引用中来完成第一个,如下所示:$all = [&nbsp; &nbsp; 'nested_arrays' => [&nbsp; &nbsp; &nbsp; &nbsp; 'id0' => [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'id8' => [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'hello'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'id3' => [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'id6' => 'apple'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]&nbsp; &nbsp; &nbsp; &nbsp; ]&nbsp; &nbsp; ],];$all['references']['id0'] = &$all['nested_arrays']['id0'];$all['references']['id8'] = &$all['nested_arrays']['id0']['id8'];$all['references']['id6'] = &$all['nested_arrays']['id0']['id3']['id6'];然后检查输出:echo '<pre>'. print_r($all['references']['id8'], true) . '</pre>';echo '<pre>'. print_r($all['references']['id6'], true) . '</pre>';输出:Array(&nbsp; &nbsp; [0] => hello)apple但是你不能对此使用 unset ,因为那只会删除数组的元素,而不是它指向的数组元素。

跃然一笑

我宁愿创建一个实现迭代器接口的对象。对象本质上是通过引用传递的。$id0 = new MyIterator($array);$all = [&nbsp; 'nested_arrays' => [&nbsp; &nbsp; 'id0' => $id0&nbsp; ],&nbsp; 'references' => [&nbsp; &nbsp; 'id0' => $id0&nbsp; ]];替代方法是递归迭代“nested_array”并填充“references”数组foreach ($nested as $k => $v) {&nbsp; // Custom recursive iteration&nbsp; ...&nbsp; $all['references'][$k] = &$v;}通常,您不能通过取消设置引用来删除原始值或对象。只有当指向该值的所有指针都被取消设置时,原始值才会被销毁。您将不得不遍历数组。
随时随地看视频慕课网APP
我要回答