亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 163 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號