请理解这不是我设计的方式,也不是这样做的正确方法。
然而,由于我接受了这项任务,并且绝对没有办法解决数据的结构问题,我的任务是处理我的工作。
我有一个如下结构的表:
ID
UniqueName
DisplayName
Tag1
Tag...
Tag27
是的,我有27列,Tag1
- Tag27
注意:由于来自未更新的15年历史的软件的数据,也无法更新,因此无法更改。 (因此我的困境)
我使用PDO
的{{1}}
如何循环显示这些fetchAll(PDO::FETCH_ASSOC)
列以及Tag*
列,而不必为每个列输入Tag*
,同时注意可能存在我在这个例子中可以有14个rs[$i]['Tag#']
列而不是27个I ...
专栏代码:
Tag
没有任何内容获得// prod_opts_value_fields_prefix = "Tag"
foreach ($rs[$i] as $key => $val) {
if ( strpos ( strtolower ( $key ), strtolower ( $prod_opts_value_fields_prefix ) ) !== false ) {
$vals .= $val . '|';
echo $val . '<br />';
}
}
'd
答案 0 :(得分:1)
您可以在foreach
上运行rs[$i]
,并检查该密钥是否包含带有strpos
的'标记'并从那里开始。
或者你可以只使用在1到27(或任何最大标记值)上运行的for
循环,并且if
条件检查是否rs[$i]['Tag$N']
(其中N是for循环)计数变量)isset,如果没有从循环中断,因为这意味着你已经浏览了所有可能的标签。
这里的第二个解决方案确实假设标签总是按顺序和按升序编号。
答案 1 :(得分:1)
如果你需要在多个地方,我可能会为首选项数组添加一个设置或一个你可以轻松重复使用的常量:
const TAG_COLUMNS = [
'Tag1',
...
'Tag27',
];
您可以在需要的地方使用它来遍历结果集。