我有一个数据库,其中存储了 20 个人口统计数据。人口统计数据来自 csv 并存储在数组中。每个数组键都是一个占位符:d1、d2,直到 d20。传入的数据可能是客户 A 的 [种族、性别、阶级] 和客户 B 的 [收入、地区]。
对于这两个客户端,db 表将它们的值存储为 d1、d2、d3...d20。数据在插入数据库时与 clientid 相关联。
我需要为数据库表编写一个插入语句。我需要它包括 d1...d20。总会有 20 个占位符。有些已填充,有些与上面的示例不同。
挑战是我不知道会有多少人被填满。
所以,我创建了一个键数组。我将它与一组传入的 csv 数据结合起来。
$demos['d01']='';
$demos['d02']='';
$demos['d03']='';
$demos['d04']='';
...
$demos['d20']='';
我产生了这个结果。
print_r($rowdata);
[1] => Array
(
[d01] => 1
[firstname] => Fred
[lastname] => Dryer
[email] => FredDryer1@email.com
[d02] => Backfield
[d03] => North
[partnerid] => 14
[d04] =>
...
[d20] =>
)
事实上,这正是我想要的。但是,我似乎只能通过添加 $rowdata_tmp['d04'] = ''; 手动到达那里。将 d04 添加到 $demos_keys 中。当键的数量与第二个数组中的元素数量不匹配时,代码将失败。见下文。
我需要以编程方式完成这场比赛。
我需要的解决方案是下面的 for 循环。出于演示目的,我将它设置为从 4 开始,因为在这种情况下,我知道它需要从那里开始。
我尝试过 $x = $place_to_start 其中 $place_to_start = 4 通过相对于传入 csvdata 的数学得出。
但是,没有喜悦。循环不起作用。500 错误。没有帮助!
$place_to_start = 4;
foreach ($csvdata as $row) {
$rowdata_tmp = explode(',', trim($row));
$rowdata_tmp['partnerid'] = $partnerid;
$rowdata_tmp['d04'] = '';
// for ($x = 4; $x = 20; $x++) {
// if ($x <10) {
// $rowdata_tmp['d0'.$x] = '';
// } else {
// $rowdata_tmp['d'.$x] = '';
// }
// }
$rowdata[] = array_combine($demos_keys, $rowdata_tmp);
}
任何人都看到我的问题,因为它与代码有关?我知道过去可能做出了更明智的设计选择……这就是我们所处的位置。所有评论都非常适用。