2012-04-27 40 views
37

有沒有從數組內部引用數組鍵的方法?這可以在代碼格式更有意義:PHP:自引用數組

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

我要的是$array['Key2']輸出一樣$array['Key1']。我可以添加$array['Key2']=&$array['Key1'];創建數組後,但如果可能的話,想保留它在一個代碼塊。

我檢查了參考文獻上的文檔,以及一些建議這裏的類似問題,並搜索「php數組參考」。

+6

不,你不能。在創建數組時,還沒有可能的參考點。所以你必須在之後添加參考。 – mario 2012-04-27 21:48:06

+1

對於一個有趣的問題+1 :-) – 2012-04-27 21:50:31

+1

除非您引用已存在的內容,否則無法在單個語句中執行此操作。所以你可以創建'$ ref = array(「Value1」,「Value2」);'然後做'$ array = array('Key1'=>&$ ref,'Key2'=> &$ref);'和'unset($ ref);''然後 - 但沒有意義,你只是做你建議的事情,然後創建參考 – DaveRandom 2012-04-27 21:52:23

回答

27

答案是這樣的,事實證明,是的。但是它不是一個整齊的語法,因爲它使用了一種子語句,並且使當前的作用域保留一個額外的引用變量。

考慮下面的代碼:

<?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 

); 

我感到驚訝的是這工作沒有任何錯誤,但它確實 - here's the proof。當然,你不會做到這一點,但你可以...

+1

+1這是有效的,因爲當你在數組中聲明兩次相同的密鑰時,它會覆蓋第一個密鑰。 :-) – 2012-04-27 22:06:37

+1

事實上,這顯然是這樣,我確實懷疑它是否會抱怨,因爲這似乎是一件很奇怪的事情,我從來沒有真正嘗試過。顯然,人們通常單獨重新分配數組中的鍵,但很少在聲明語句中! – DaveRandom 2012-04-27 22:09:36

+0

@Starx:刪除評論和空白。這只是一個說法。 – 2012-04-27 22:11:23

0

由於您尚未初始化變量,所以無法在一個塊中完成。與類變量相同。要做這樣的事情,你需要以任何方式創建任何變量,而不僅僅是使用它的鏈接,而是使用它的內存,所以再一次,對你的問題的真正答案是 - 不可能:)