为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕的地6264312 2023-04-02 15:08:52
我想在 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'])...是的,或者你可以吗?
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您可以通过将引用存储在数组的引用中来完成第一个,如下所示:


$all = [

    'nested_arrays' => [

        'id0' => [

            'id8' => [

                'hello'

            ],

            'id3' => [

                'id6' => 'apple'

            ]

        ]

    ],

];


$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

(

    [0] => hello

)


apple

但是你不能对此使用 unset ,因为那只会删除数组的元素,而不是它指向的数组元素。


查看完整回答
反对 回复 2023-04-02
?
跃然一笑

TA贡献1826条经验 获得超6个赞

我宁愿创建一个实现迭代器接口的对象。对象本质上是通过引用传递的。


$id0 = new MyIterator($array);

$all = [

  'nested_arrays' => [

    'id0' => $id0

  ],

  'references' => [

    'id0' => $id0

  ]

];

替代方法是递归迭代“nested_array”并填充“references”数组


foreach ($nested as $k => $v) {

  // Custom recursive iteration

  ...

  $all['references'][$k] = &$v;

}

通常,您不能通过取消设置引用来删除原始值或对象。只有当指向该值的所有指针都被取消设置时,原始值才会被销毁。您将不得不遍历数组。


查看完整回答
反对 回复 2023-04-02
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信