2014-04-11 156 views
2

我正在與Drupal目前,他們有這個東西與渲染數組。他們將磅鍵放在渲染數組的配置索引前,然後由渲染函數使用。龐大的密鑰/哈希鍵/哈希標籤在PHP數組

但是!這個問題與Drupal無關。我在接下來幾行提供的代碼完全獨立於任何php應用程序。香草PHP有些人會說。

<?php 
    $array = array(
     '#title' => 'Social media button settings', 
     '#type' => 'fieldset', 
     array(
     '#title' => 'Facebook', 
     '#type' => 'input', 
    ) 
    ); 

    foreach($array as $i => $d) { 
     // This line could contain ANY!!! key as long as it starts 
     // with a pound key. 
     if (isset($d['#title'])) { 
     var_dump('Index: ' . $i); 
     echo 'Data:'; 
     var_dump($d); 
     var_dump('$d["#title"]: ' . $d['#title']); 
     } 
    } 

輸出是:

string 'Index: #title' (length=13) 

Data: 

string 'Social media button settings' (length=28) 

string '$d["#title"]: S' (length=15) 

string 'Index: #type' (length=12) 

Data: 

string 'fieldset' (length=8) 

string '$d["#title"]: f' (length=15) 

string 'Index: 0' (length=8) 

Data: 

array (size=2) 
    '#title' => string 'Facebook' (length=8) 
    '#type' => string 'input' (length=5) 

string '$d["#title"]: Facebook' (length=22) 

預計產出將是:

string 'Index: 0' (length=8) 

Data: 

array (size=2) 
    '#title' => string 'Facebook' (length=8) 
    '#type' => string 'input' (length=5) 

string '$d["#title"]: Facebook' (length=22) 

還是看不到的東西嗎? 這只是PHP中真正令人討厭的錯誤嗎?

很高興收到你們的來信。

func0der

更新------ >>

我使用PHP 27年3月5日通過MAMP包裹。 並在此嘗試:http://writecodeonline.com/php/ 兩者結果相同。

回答

1

你的代碼給了我想要的輸出。我懷疑有一些東西 在混亂的環境中。或者你在 上覆制它或類似的東西時出錯。

CNC中

的評論如下結論:isset是在5.3和以前的馬車。在5.4中修復了 。來自php.net:

非數字字符串偏移量 - 例如$ a ['foo']其中$ a是一個字符串 - 現在在isset()上返回false,在empty()上返回true,如果嘗試使用它們,則會生成E_WARNING。 類型的偏移量double,bool和null產生E_NOTICE。數字字符串(例如$ a ['2'])仍然 像以前一樣工作。請注意,偏移量'12.3'和'5 foobar'被視爲非數字 並生成E_WARNING,但分別轉換爲12和5,因爲後向 兼容性原因。注意:以下代碼返回不同的結果。 $海峽= 'ABC'; var_dump(isset($ str ['x'])); //對於PHP 5.4或更高版本爲false,但對於5.3或更低版本爲true

+0

如果您複製了完全相同的代碼,那麼這甚至是可能的? 我在這裏試過了:http://writecodeonline.com/php 同樣的結果。這是一個完全不同的環境。 – func0der

+0

很酷。是的,我複製了相同的代碼。這似乎是一個不同的PHP版本的問題。 5.4,5.5工作正常,但不是5.3。測試它在這裏http://sandbox.onlinephpfunctions.com/和我的機器上運行5.4 – monocell

+0

這是我認爲isset的問題。 http://www.php.net/manual/en/migration54.incompatible.php – monocell

0

沒有錯,您的期望完全不同意PHP的工作原理。

如果您希望將「標題」和「類型」值視爲成對,您需要以某種方式將它們組合在一起(而不僅僅是「將它們放在一起」)。一種方法是在每一對中包裝另一個數組,這會導致您的預期輸出。你已經這樣做了爲Facebook /輸入對,所以刪除數據的其餘部分提供了輸出你期望:

$array = array(
    array(
    '#title' => 'Facebook', 
    '#type' => 'input', 
) 
); 
+0

我知道。你不明白這一點。 我不能讓我扔掉數據並說它的工作。我的數組是應該是。它是一個嵌套的表單數組。包含輸入字段的字段集。外部磅鍵索引用於配置字段集。其他的是用於輸入字段的配置。完全有效。 – func0der

+0

我的意思是「你不能讓我扔數據......」。 – func0der

+0

+1。你的數組有兩個條目,然後是一個子數組,然而@ func0der你只是期望子數組出來。 –