这主要是一个 PHP 答案,但该方法实际上可能与语言无关。
通过一个简单的解析器运行 CSV 文件后,我得到了一个类似于以下内容的多维数组:
array( 'estimated' =>
array(
array( "TITLE" => 'MAIN', "CURR_PERF" => 100, "POT_PERF" => 75 ),
array( "TITLE" => 'HEAT', "CURR_PERF" => 90, "POT_PERF" => 60 ),
array( "TITLE" => 'CO2', "CURR_PERF" => 56, "POT_PERF" => 40 ),
),
'actual' =>
array(
array( "TITLE" => 'MAIN', "CURR_PERF" => 100, "POT_PERF" => 75 ),
array( "TITLE" => 'HEAT', "CURR_PERF" => 89 , "POT_PERF" => 75),
array( "TITLE" => 'CO2', "CURR_PERF" => 40, "POT_PERF" => 20 ),
);
);
现在,一方面是可怕的数据结构,而无需重构底层解析器——如何确保您可以按特定顺序访问这些数据结构的最佳方式是什么?不必触及底层解析器?
如果您使用for()
/foreach()
循环进行循环,您将只能以线性顺序读取它们 - 增加或减少元素。您不一定能够深入挖掘并获得所需的特定值。
例如,CSV 文件可以estimated
以与 ; 的值不同的顺序表达actual
; 并且可能需要以另一种顺序输出它们。
例如,这是我脑海中浮现的三个不同的命令:
-> MAIN HEAT CO2
-> HEAT MAIN CO2
-> CO2 HEAT MAIN
此外,通常情况下,CSV 文件中的标签名称并不完全是用户友好的 - 因此需要将它们“翻译”(如果您愿意)成更人性化的东西。当然,最好不要使用大量if()
语句!
鉴于这是一个非常具体的用例,但这是我以前见过的关于被序列化的数组的东西——并且经常发现它们实际上是嵌套的。
我已经发布了一种可能的解决方案,但很高兴看到其他解决方案。(过去,当我做过类似的事情时,我从来没有接受过自己的答案;))我确信一定有一种比我设计的更优雅的方式..!