2017-04-13 99 views
1

动态变量我有我存储可变位置的数据库,例如,我有引线阵列,所以我有一个名为在数据库中的ID字段,具有$lead['@attributes']['Id']位置。这一切都在数据库中设置。PHP从阵列

我有被检索从阵列我有值的问题。

我已经试过目前是这样的:

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;

我需要创建动态变量,我将其存储在数据库中以获取数组中的信息。

Examples

这是我想从拉数组:

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" 
} 

EDIT 1

我正在从一个平台,一个XML文件,通过卷曲。我服用的是XML文件,过simplexml_load_string()运行它,然后json_encode()json_decode(),让我在最后的数组。

然后我也有一个数据库,用字段名的列表,并在阵列中的位置,我从XML文件创建。然后,我循环访问字段数据库,并以更好的解析方式将XML文件保存到数据库中。我每5分钟更新一次信息。我不是生成XML文件的人,也不是以我必须的方式保存信息。我知道这可能不是最好的办法,但它仅供内部使用,我公司以外的人甚至无法访问我们正在制作的网站。

EDIT 2/UPDATE 1

我RAN到另一个路障。他们有一个名为“字段”的项目,其中有一个字段数组。

fields example

的问题是,一切都在他们的 “属性”。例如,他们是地址,电子邮件,名字,姓氏等。我将如何循环以获取正确的数据?有任何想法吗?

这个问题也与其他3个对象存在。操作和日志,大量日志...

+2

这是一种可怕的方式来存储数据,你应该改变类似于路径'lead.attributes.id'或其他一些策略。唯一的办法是你的方式是'eval(“\ $ newItem [{$ field-> name}] = {$ field-> location};”);' – AbraCadaver

+0

AbraCadaver您会有什么建议?这仅用于解析数据。我们使用的平台为我们提供了一个XML文件,并对其进行解析。为了便于更新,我们希望使用MySQL数据库使其全部动态,以便从我们生成的XML数组中获取信息。我们解析它,然后将它保存到MySQL数据库中的表中。 –

+1

'未定义变量:$ lead ['@ attributes'] ['Id']'表示将它视为字符串,而不是对象/数组。 Sooo ... @ AbraCadaver的eval建议,这样做;) –

回答

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电子表格,并且我编写了代码来解析它,并从中获取我需要的数据。但发送电子表格的部门每周都会更改格式,所以我不得不重新编码我的解析例程。我试着告诉他们,“决定电子表格的格式,并保持每周都一样。”他们忽视了我的要求,并继续以不同的方式进行。然后我的合同到了,我离开了,知道他们会在我离开后的一个星期内破产。

+0

你能看到我的更新2 /编辑2或任何帖子。还有另外一个问题,如果有什么我可以轻易地解决的话,我会喜欢这样做。另外,如果我需要深入4层会发生什么?根据有多少'.',我需要对'[$ f1] [$ f2] [$ f3] ...'进行编码吗? –

+0

是的,最难的部分是它们不会改变它,但是我们有多个客户端使用相同的平台,但是XML中的数据/格式不同。因此,我为什么要做动态变量这样的事情。我向LinkedIn发送了一个连接请求,所以我可以直接向您发送消息。你还好吗? –

+0

我很高兴认识你,但是我有时间限制我可以做一对一的帮助。我喜欢回答关于Stack Overflow和Quora的问题,因为像这样公开这样做可以帮助很多其他读者。 –