2013-03-12 135 views
1

我有以下一段PHP代碼,它將值存儲在一個數組中,但我正在ColdFusion中重寫該應用程序,並且不知道在ColdFusion中執行相同功能的語法是什麼。將PHP數組轉換爲ColdFusion語法

$data = array("isReadOnly" => false, "sku" => "ABCDEF", "clientVersion" => 1, "nuc" => $NUC, "nucleusPersonaId" => $personaID, "nucleusPersonaDisplayName" => $dispname, "nucleusPersonaPlatform" => $platform, "locale" => $locale, "method" => "idm", "priorityLevel" => 4, "identification" => array("EASW-Token" => "")); 

有人可以幫忙嗎?

回答

4

這不是一個數組。這是一張地圖(鍵值對)。 PHP並沒有在這兩個構造(除了「數字」和「關聯」數組)之間做出區別,但ColdFusion(基於Java)的確如此。在ColdFusion的等效將是一個結構:

<cfscript> 
    data = structNew(); 
    data["isReadOnly"] = false; 
    data["sku"] = "ABCDEF"; 

    // You can also nest structs, if need be 
    data["identification"] = structNew(); 
    data["identification"]["EASW-Token"] = ""; 
</cfscript> 
+0

注:CF8最多可以使用'{}'而不是'structNew()' – 2013-03-12 13:27:01

+0

@MattBusche但是它是相當商榷,如果真的提高了可讀性。 ;)當你明白自己在做什麼時,你總是可以學會編寫較短的代碼。 – 2013-03-12 13:42:32

8

你有沒有在PHP什麼,貌似什麼叫做ColdFusion的一個「結構」或「對象」。

試試這個代碼,你的PHP轉換爲CFML語法:

<cfset variables.data = { 

    "isReadOnly" = false, 
    "sku" = "ABCDEF", 
    "clientVersion" = 1, 
    "nuc" = variables.NUC, 
    "nucleusPersonaId" = variables.personaID, 
    "nucleusPersonaDisplayName" = variables.dispname, 
    "nucleusPersonaPlatform" = variables.platform, 
    "locale" = variables.locale, 
    "method" = "idm", 
    "priorityLevel" = 4, 
    "identification" = { "EASW-Token" = "" } 

} /> 

<cfdump var="#variables.data#" /> 

它利用{}聲明,它將創建的ColdFusion的結構。你可以用花括號(這被稱爲隱式結構)或使用structNew()函數這樣做。隱式版本是更新和更優選的方法。

另請注意,您將需要轉換您的變量。在PHP中,您的變量將被解碼爲$withTheDollarSign。在ColdFusion中,使用<cfset />標籤創建變量。

這些都是相同的:

PHP

<?php $hello = 'world'; ?> 

的ColdFusion:

<cfset variables.hello = 'world' /> 

你也可以只寫它想:

<cfset hello = 'world' /> 

但是,我喜歡總是對我的變量進行研究。變量作用域是變量的默認作用域,但明確說明這一點以避免命名衝突仍然是一種很好的做法。

希望這會有所幫助。 Mikey。

PS - 作爲獎勵點,陣列在一個非常相似的方式產生,除了沒有{}你會使用[]。這是關於如何在ColdFusion中創建結構和數組的一篇很好的文章。

http://www.bennadel.com/blog/740-Learning-ColdFusion-8-Implicit-Struct-And-Array-Creation.htm

+1

查看文檔可能也有幫助: http://help.adobe.com/en_US/ColdFusion/10.0/Developing/WSc3ff6d0ea77859461172e0811cbec09f0b-7fe9.html – 2013-03-12 12:05:04

+0

現在他爲什麼回答,他沒有試過...... @亞當注意到它 – 2014-05-03 18:06:17

+0

@ user3454903你沒有看到你問的問題和這個人問什麼之間的區別?他們詢問了一個單一的陳述。你在問幾十行代碼。建議您閱讀本文:http://stackoverflow.com/help/on-topic,特別指出「3」。 – 2014-05-03 18:14:22

0

另一種選擇是單獨聲明的每個選項。您也不需要variables.前綴。對<cfmail>等標籤使用attributecollection=""選項時,該語法可能最常用,但可以在任何情況下使用。

<cfset data = {} /> // create a struct 
<cfset data.isReadOnly = false /> 
<cfset data.sku = 'ABCDEF' /> 
<cfset data.clientVersion = 1 /> 
<cfset data.nuc = NUC /> 
<cfset data.nucleusPersonaId = personaID /> 
<cfset data.nucleusPersonaDisplayName = dispname /> 
<cfset data.nucleusPersonaPlatform = platform /> 
<cfset data.locale = locale /> 
<cfset data.method = 'idm' /> 
<cfset data.priorityLevel = 4 /> 
<cfset data.identification = { EASW-Token = '' } /> 

<cfdump var="#data#" />