我有一个数据库,我正在存储变量位置。例如,我有一个引导数组,所以我在数据库中有一个名为ID的字段,其位置为$lead['@attributes']['Id']
。这都是在数据库中设置的。
我遇到的问题是从我拥有的数组中检索值。
我目前的尝试是这样的:
foreach($t AS $lead) {
$newItem = [];
foreach ($this->crm->fields AS $field) {
$newItem[$field->name] = ${$field->location};
}
}
虽然这不起作用。它给我一个错误说:
Undefined variable: $lead['@attributes']['Id']
但是,如果我echo $lead['@attributes']['Id']; die();
,它会将ID放在页面上。我做错了什么?
TLDR;
我需要创建存储在数据库中的动态变量,以从数组中获取信息。
实施例
这是我想要的数据:
array(6) {
["@attributes"]=>
array(10) {
["Id"]=>
string(7) "1086984"
["LeadTitle"]=>
string(7) "1086984"
["CreateDate"]=>
string(19) "03/11/2015 02:00:00"
["ModifyDate"]=>
string(19) "04/13/2017 13:02:57"
["ActionCount"]=>
string(2) "13"
["LogCount"]=>
string(2) "13"
["ReminderCount"]=>
string(1) "1"
["ReadOnly"]=>
string(5) "false"
["Flagged"]=>
string(5) "false"
["LastDistributionDate"]=>
string(19) "01/01/0001 00:00:00"
}
}
我拥有的数据库中包含以下内容:
ID | Name | Location
1 | ID | $lead['@attributes']['Id']
最后,我得到的数组应如下所示:
array(10) {
["ID"]=>
string(7) "1086984"
}
我通过cURL从平台获取XML文件。我正在使用该XML文件,通过simplexml_load_string()
,然后json_encode()
和json_decode()
运行它,最后给我一个数组。
然后我还有一个数据库,其中包含一个字段名列表,以及我从XML文件创建的数组中的位置。然后我循环遍历字段数据库,并以更好的解析方式将XML文件保存到数据库中。我每5分钟就更新一次这样做一次。我不是生成XML文件的人,也不是通常以我必须的方式保存信息。我知道这可能不是最好的方法,但它仅供内部使用,我公司以外的任何人都无法访问我们正在制作的网站。
我进入另一个ROADBLOCK。他们有一个名为" fields"的项目,其中包含一系列字段。
问题是,一切都是"属性"在他们。例如,它们是地址,电子邮件,名字,姓氏等。我将如何循环以获取正确的数据?有什么想法吗?
此问题也存在于其他3个对象中。动作和日志,大量日志......
答案 0 :(得分:1)
为避免使用eval(),您可以将数据存储在数据库中,如下所示:
ID | Name | Location
1 | ID | @attributes.Id
数据库中的数据不需要知道PHP变量的名称。
foreach($t AS $lead) {
$newItem = [];
foreach ($this->crm->fields AS $field) {
list($f1, $f2) = explode('.', $field->location);
$newItem[$field->name] = $lead[$f1][$f2];
}
}
重新更新:
老实说,我不会使用数据库来编码你的字段映射。我将在PHP脚本中定义字段映射。
您必须为字段,操作和日志定义特殊情况循环。
我不羡慕你。我已经完成了这样的应用程序,我必须接受来自其他部门的数据,并以一些不明确的方式格式化。在我的情况下,我收到了一个Excel电子表格,我编写了代码来解析它并从中获取我需要的数据。但是发送电子表格的部门每周都会更改格式,因此我不得不重新编写解析例程。我试着告诉他们,“决定电子表格的格式并保持每周一样。”他们忽略了我的要求,并且每次都继续不同。然后我的合同到了,我离开了,知道他们会在我离开后一周打破它。