2017-09-26 34 views
1

我一直想弄清楚爲什麼我的數組不會輸出。無法輸出簡單數組?

我在數組上做了一個var轉儲,它轉儲它就好了,但是當我嘗試輸出它時,它會返回致命錯誤。另外,我想,也許我必須可能遍歷數組才能訪問它,所以我也嘗試了這一點,並設法通過執行var轉儲來遍歷數組,但是當我輸出它時,它會打破頁面。

這是我試過的代碼,我嘗試了近3個小時,嘗試了各種各樣的東西。

的ColdFusion:

<cfset defaultDirectory = "C:\uploads\" /> 

<cfdirectory 
    directory="#defaultDirectory#" 
    action="list" 
    name="myList" 
> 

<!---Get Array of Directory Names ---> 
<cfquery dbtype="query" name="fileNames"> 
    SELECT NAME 
    FROM myList 
</cfquery> 

<!---Create array ---> 
<cfset myArray=arraynew(1)> 

<!---Populate array with directory query data "name" ---> 
<cfloop query="fileNames"> 
    <cfset myArray[CurrentRow][1]=#defaultDirectory# & NAME & "\"> 
</cfloop 

到現在爲止,一切似乎進展良好。我拋出數組變量,它輸出我想要的。所以我嘗試了這一點,它返回了一個致命的錯誤。

<cfoutput> 

<cfif directoryExists("#myArray[1]#")> 
    it exists. 
    <cfelse> 
    Doesn't exists. 
</cfif> 

<cfoutput> 

這裏是被轉儲的變量的屏幕截圖。
enter image description here

然後我想到的可能是我必須遍歷數組才能訪問它?

所以我試過這個。

<cfloop index="i" from="1" to="#arrayLen(myArray)#"> 
    <cfdump var="#myArray[i]#" 
</cfloop> 

這個設法從陣列中傾倒了所有的事情,但是當我嘗試輸出它,它會返回一個致命的錯誤,我不知道爲什麼。我查了關於如何轉儲數組的教程,我不確定我在做什麼錯了?任何建議,將不勝感激。

這裏是被請求myArray的結構的截圖:

我做

<cfvar dump="#myArray#"> 

enter image description here

+0

請添加轉儲陣列的屏幕截圖,以便我們可以檢查結構。 –

+0

這是你想要的嗎?那就是被轉儲的myArray變量的結構。 – Curious13

+0

是的。所以你有一個結構數組。我會發佈一個答案,因爲它會給我更多的空間來描述這個。 –

回答

2

你有結構的數組。所以你不能簡單地將數組值作爲字符串輸出;這就是爲什麼你會收到錯誤。

您需要引用數組索引以及結構的關鍵字來提取值。像這樣的僞代碼:arrayName[arrayIndex][structureKey]。它看起來像你在最初的代碼示例中工作。在這裏:

<cfset myArray[CurrentRow][1]=#defaultDirectory# & NAME & "\"> 

這是令人困惑的我,因爲你的結構關鍵恰好是數字1。所以它看起來像一個索引或其他東西。

我創建了一個要點向您展示一個工作示例 - TryCF Gist。 這裏是我寫的代碼:

<cfscript> 
structA = {1="C:\uploads\101 San Fernando"}; 
structB = {1="C:\uploads\121 Tasman"}; 
structC = {1="C:\uploads\360 Residences"}; 
structD = {1="C:\uploads\481 On Mathilda"}; 

myArray = []; 
ArrayAppend(myArray,structA); 
ArrayAppend(myArray,structB); 
ArrayAppend(myArray,structC); 
ArrayAppend(myArray,structD); 

writeDump(myArray); 

//writeOutput(myArray[1][1]); 

for (i=1;i LTE ArrayLen(myArray);i=i+1) { 
    writeOutput('<p>' & myArray[i][1] & '</p>'); 
} 
</cfscript> 

該代碼的輸出是:

enter image description here

所以,你的代碼應該是這樣的:

<cfif directoryExists("#myArray[1][1]#")> 
    it exists. 
<cfelse> 
    Doesn't exists. 
</cfif> 

或者,如果你換在這樣的循環中:

<cfloop index="i" from="1" to="#arrayLen(myArray)#"> 
    <cfif directoryExists("#myArray[i][1]#")> 
     it exists. 
    <cfelse> 
     Doesn't exists. 
    </cfif> 
</cfloop> 
+0

謝謝你的解釋!很有幫助 – Curious13