作为背景,我正在编写解析csv文件的PHP代码,并对每个csv文件的每一行执行某些操作.什么"东西"取决于行中的值.使用"if"结构测试值很容易,但是,硬编码条件并不是最佳的,原因有两个:
有几百个可能的条件需要测试.那就是开始.将来会增加更多条件.
每个csv行不需要针对每个条件进行测试; 只要行的条件评估为真,就不需要评估其他条件.
理想情况下,对于我的情况,"if"条件将存储在postgres表中,逐个放入字符串变量,然后每个变量将由单个if结构(在某种循环内)测试,直到条件为止评估为真.
简化示例:
$arrayOne[3] = "foo";
// in practice, the value of this variable would not be hard-coded;
// it would come from a postgres table
$conditionString="\$arrayOne[3] == \"VANILLA\"";
if($conditionString) {
// do something, then exit the loop this if statement would be
// inside of in actual practice
}
Run Code Online (Sandbox Code Playgroud)
这个问题基本上是在问
有三个基本答案:
解决方案3通常是我正在寻找的,但第二部分似乎效率低下且不必要地复杂.毕竟,为什么只需要存储然后评估你需要的单个字符串就更容易了,为什么要从众多字符串(顺便提一下,这会使postgres中的存储变得复杂)中构建php代码?
有没有办法做到这一点?
非常感谢到目前为止的答复.ComFreek,特别感谢您的详细回复.你建议的解决方案可能正是我所需要的,但坦率地说,如果是这种情况,我没有经验立即知道.我肯定会花时间试图理解你在说什么.希望它能解决我的问题.
如果没有,同时回答其他人提出的几个问题:
1)if条件通常不简单.许多将包含多个复合AND和OR测试.伪代码中的样本条件可能是:(field2 =="BUY"AND(strpos("REINVEST DIVIDEND",field6)或strpos("CASH MERGER,field6))AND field2!="TTXY"AND field3> 0).
2)CSV文件来自众多金融机构.它们包含大致相同的信息,但每个都有唯一的数据,并且所有数据都包含在不同位置的数据.而且他们以不同的方式表达数据.在某些情况下,付款用负数表示; 在其他人中,以正数表示.有些人有单独的存款和取款领域; 一些表示存款和取款,另一栏中有代码.等等.代码需要确定交易的性质(信用卡购买,支票,股票买卖,退休金,等等),然后,如果可以,分配正确的借方/贷方帐号(从图表中帐户)到该交易.总而言之,有数百种可能的条件,可能成千上万.(如果有人想知道,代码可以确定特定csv文件来自的机构,并将仅针对与该机构相关的条件测试该文件中的交易.)
3)代码需要足够灵活(以换句话说,无需编写新代码)允许将来添加新测试.对我来说,能够为postgres表添加一个新条件(这将是要检查的代码的另一个测试)是足够的灵活性.
试图回答Phil的问题和评论(我可能没有正确理解):
1)我知道preg_match是什么,但还没有真正探索它能做什么,所以它实际上可能是我的问题的答案.我会检查一下.
2)目前,代码不对事务进行分组(也就是说来自单个csv文件的单行); 相反,它查看每一行,确定它是什么,然后在适当的postgres表中存储一个额外的数据,然后移动到下一行.交易存在某些"类型"(比如信用卡购买),但它们从未被分组以进行进一步处理. …
php ×1