2013-01-09 43 views
1

我知道這似乎是應該避免的設計,但讓我們只是說它是需要的: 是否有可能在初始化時引用屬於某個值的鍵?引用數組中的鍵值

這是我想象它是(不完全在我需要它的情況下,更關鍵的是原始的爲好):

$array = array(25 => "My key is " . $this->key); 

我需要這個,因爲數組鍵在每個使用值。實際上,該值是另一個具有使用第一個數組鍵的值的數組。就像我在評論中所說的那樣,我想保持乾爽。這樣做是沒有問題的,但我想這樣做很好;)

+1

輸出結果如何? – Baba

+0

這是一個關聯數組還是一個常規數組(又名0..n的鍵)? –

+2

*爲什麼*你需要那個嗎? – ThiefMaster

回答

0

不,在定義該值時無法引用該鍵。除了編寫一個將其嵌入到字符串中的預處理器。但是,這隻適用於原始值。

1

如果你正在寫一個自己的數組你可以把鍵值改爲數組值,如:

$array = array(25 => "My key is 25"); 

如果你有一個數組已經可以使用foreach和所有的鍵添加到它的價值:

foreach($array as $key => $value) { 
    $array[$key] = sprintf('%s %s', $value, $key); 
} 

或者,如果你只是想有現有陣列您可以使用array_flip的鍵的數組,如果你想保持鍵=>值,但有鍵和值翻轉。或者如果您只需要一組鍵,則可以使用array_keys

爲了讓你想要什麼:什麼地方初始化數組,它的價值就可以實現ArrayAccessCountable並有不添加任何鍵:

public function offsetGet($offset) { 
    return isset($this->container[$offset]) 
       ? $this->container[$offset] . ' ' . $offset 
       : null; 
} 

或這樣的事情。但是在這種情況下,你需要一個包含這個數組的變量來作爲你的實現的一個實例。根據這個類的用法,你可能需要實現更多的接口。

+0

我想繼續嘗試,這就是爲什麼1不是首選(任何爲什麼我問這個問題)。 2不是一個選項,因爲我想在數組初始化時執行此操作。 –

+0

然後,只需在陣列正在初始化的位置添加一個鍵值。 –

+0

糟糕,我想寫「幹」而不是嘗試。我不想裁員。 –