Php 使用ColdFusion将CSV转换为多维数组

Php 使用ColdFusion将CSV转换为多维数组,php,arrays,coldfusion,csv,multidimensional-array,Php,Arrays,Coldfusion,Csv,Multidimensional Array,我正在尝试使用ColdFusion(版本7.0.2.142559)将CSV文件加载到阵列中。现在我得到了以下错误: 无法将coldfusion.runtime.Struct类型的标量值分配给二维coldfusion数组。 ColdFusion二维数组只能容纳一维ColdFusion数组和Java列表对象 我的CSV文件设置为以下格式: a,b c,d e,f 这是我第一次使用ColdFusion,所以我可能有一些我看不到的简单语法错误。代码如下 <!--- get the current

我正在尝试使用ColdFusion(版本7.0.2.142559)将CSV文件加载到阵列中。现在我得到了以下错误:

无法将coldfusion.runtime.Struct类型的标量值分配给二维coldfusion数组。 ColdFusion二维数组只能容纳一维ColdFusion数组和Java列表对象

我的CSV文件设置为以下格式:

a,b
c,d
e,f
这是我第一次使用ColdFusion,所以我可能有一些我看不到的简单语法错误。代码如下

<!--- get the current full path of the current --->
<cfset currentPath = getCurrentTemplatePath()>
<cfset currentDirectory = getDirectoryFromPath(currentPath)>
<!--- get and read the CSV-TXT file --->
<cffile action="read" file="#currentDirectory#/smalltest.csv" variable="csvfile">
<!--- create a new array --->
<cfset array=ArrayNew(2)>
<!--- loop through the CSV-TXT file on line breaks and insert into database --->
<cfloop index="index" list="#csvfile#" delimiters="#chr(10)##chr(13)#">

    <cfset array[#index#][1]=#listgetAt('#index#',1, ',')#>
    <cfset array[#index#][2]=#listgetAt('#index#',2, ',')#>

</cfloop>

<cfdump var=#array#>

奖金:

另一方面,如果能够从ColdFusion中调用PHP文件,这将节省我很多时间,因为我已经用PHP完成了整个脚本(这只是一小部分)。我读过关于ColdFusion自定义标记的文章(标记
对我来说非常合适),但是管理员说不行,因此我必须使用ColdFusion或者找到一些方法通过ColdFusion呈现PHP。框架、JavaScript或
标记都是我认为可能有用的东西。。。如果你有什么想法,请告诉我。


<cfset array=ArrayNew(2)>
<cfset lineNum=1>
<cfloop index="line" list="#csvfile#" delimiters="#chr(10)##chr(13)#">
    <cfset array[lineNum] = listToArray(line)>
    <cfset lineNum = lineNum + 1>
</cfloop>

实际上,我认为您可以使用一维数组和arrayAppend进一步简化Henry的示例

<cfset array=ArrayNew(1)>
<cfloop index="line" list="#csvfile#" delimiters="#chr(10)##chr(13)#">
    <cfset arrayAppend(array, listToArray(line))>
</cfloop>
与你的错误无关,这些迹象都是不必要的。代码将以任何方式工作,但编写起来更简洁:

<cfset array[lineNum][1]= listgetAt( index, 1, ',')>

而不是

<cfset array['#lineNum#'][1]=#listgetAt('#index#',1, ',')#>


如果您可以解释加载CSV数组后现有PHP脚本的功能,我们可能会告诉您是否可以从CF@Anthony调用PHP脚本。PHP脚本从CSV文件中获取信息,并以某种方式对其进行排序(基于URL中传递的变量),然后将其输出到HTML表@如果我的服务器支持自定义标记,Henry
似乎是个好主意,但事实并非如此。否则我为什么要忘记
>谢谢。不是一行,但很接近;-)@Leigh@Henry你的两个答案都很好,非常感谢。我知道误用
索引是我的错误,但我想确保我正确理解了你的答案。答案的第三行是将当前行的所有元素复制到数组中,由于
listToArray
的默认分隔符是逗号,因此读取两个元素而不是一个。该过程将重复,直到到达列表的末尾。这是对的吗?@typoknig-基本上是的。@Leigh@Henry在把这个问题弄得一团糟之后,我发现你的两个解决方案都有一个不幸的副作用。如果CSV文件的某个元素包含逗号,则会出现问题:(你们还有其他想法吗?请记住,一旦数据加载到数组中,我需要通过ColdFusion或JavaScript对其进行排序。@typoknig-这在任何语言中都会是一个问题。显然,分隔符值不应该在数据本身中使用,因为它几乎无法识别。v至少报价的价值?
<cfset array['#lineNum#'][1]=#listgetAt('#index#',1, ',')#>