2013-07-02 259 views
0

在聲明數組的時候,數組是否可以賦值給它自己的元素值?在另一個數組元素中包含數組元素值?

下面是一個代碼示例:

$arr = array (0 => '<ul class="'.$arr[1].'">', 1 => 'some_class'); 

echo $arr[0]; // <ul class="some_class"> 

我試過passing by reference&$arr[1],而不是在上面的代碼$arr[1]),但它給出了一個語法錯誤。

+0

賦值左側的'$ arr'直到右邊被賦值後纔會存在,而右邊的$ arr [1]'不能存在,直到右邊完成並分配到左側。例如你甚至在雞還沒有存在之前就試着計數你的雞。 –

回答

1

你可以做一些沿着這些路線

$arr = array ('<ul class="%s">', 'some_class'); 

,當你想要渲染只是致電

echo call_user_func_array("sprintf", $arr); 
+0

如果有更多的功能,這將工作嗎?數組中的那兩個元素? –

+0

只要第一個參數中佔位符的數量等於數組中元素的數量(對於模式本身減1),你就是金。 – Orangepill

+0

這是一個非常巧妙的技巧。我一直在尋找,但它確實解決了我的問題,謝謝。 –

1

不,您不能在聲明數組之前訪問數組的元素。只需使用另一個變量:

$class_name = 'some_class' 
$arr = array (0 => '<ul class="'.$class_name.'">', 1 => $class_name); 

echo $arr[0]; // <ul class="some_class"> 

你也可以單獨分配要素,並指他們在以後的任務:

$arr = array(); 
$arr[1] = 'some_class'; 
$arr[0] = '<ul class="'.$arr[1].'">'; 

echo $arr[0]; // <ul class="some_class"> 
+0

我想這樣做,如果'$ arr [1]'改變了,'$ arr [0]'也會改變。我還想避免在'echo $ arr [0]。$ arr [1]。'「>''之類的末尾加上''>''或爲''>>'創建另一個數組元素'那些似乎是我唯一的選擇 –

+1

聽起來像一個類的工作與價值的getter/setter,或重新考慮你的設計(也許你需要使用更多的功能?) – sgroves

相關問題