【问题标题】:PHP Dynamic Variables from an array来自数组的 PHP 动态变量
【发布时间】:2017-09-09 23:31:45
【问题描述】:

我有一个存储变量位置的数据库。例如,我有一个潜在客户数组,所以我在数据库中有一个名为 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"
}

编辑 1

我正在通过 cURL 从平台获取 XML 文件。我正在获取那个 XML 文件,通过simplexml_load_string() 运行它,然后运行json_encode()json_decode(),最后给了我一个数组。

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

编辑 2/更新 1

我又撞上了一个路障。他们有一个名为“fields”的项目,其中包含一个字段数组。

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

其他 3 个对象也存在此问题。动作和日志,大量的日志......

【问题讨论】:

  • 这是一种可怕的数据存储方式,您应该更改为类似路径lead.attributes.id 或其他策略。唯一的办法就是按照自己的方式进行操作是eval("\$newItem[{$field->name}] = {$field->location};");
  • AbraCadaver 你有什么建议?这仅用于解析数据。我们使用的平台为我们提供了一个 XML 文件,我们对其进行解析。为了便于更新,我们希望使用 MySQL 数据库使其全部动态化,以从我们生成的 XML 数组中获取信息。我们解析它,然后将其保存到 MySQL 数据库中的一个表中。
  • Undefined variable: $lead['@attributes']['Id'] 表示,它将其视为字符串,而不是对象/数组。太好了...@AbraCadaver 的评估建议,去做吧 ;)
  • 问题,代码eval("\$newItem[{$field->name}] = {$field->location};"); 给了我这个错误:Use of undefined constant ID - assumed 'ID'
  • 为什么不在$field->location 部分尝试eval()?那不行吗?

标签: php mysql arrays variables dynamic


【解决方案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 电子表格,我编写了代码来解析它并从中获取我需要的数据。但是发送电子表格的部门每周都会改变格式,所以我不得不重新编码我的解析程序。我试着告诉他们,“决定电子表格的格式并每周保持不变。”他们无视我的要求,每次都继续做不同的事情。然后我的合同到期了,我离开了,因为我知道他们会在我离开后的一周内违约。

【讨论】:

  • 你能看到我的更新 2/编辑 2 或帖子上的任何内容吗?还有另一个问题,如果有什么我可以很容易地解决它,我很乐意这样做。另外,如果我需要深入 4 会发生什么?我是否需要根据. 的数量对[$f1][$f2][$f3].. 进行编码?
  • 是的,困难的部分是他们没有改变它,但是我们有多个客户端使用相同的平台,但是 XML 中的数据/格式不同。因此,为什么我想要做一些像动态变量这样的事情。我在 LinkedIn 上向您发送了连接请求,因此我可以直接向您发送消息。你没问题吗?
  • 很高兴认识您,但我可以提供一对一帮助的时间有限。我喜欢回答有关 Stack Overflow 和 Quora 的问题,因为像这样在公共场合这样做可以帮助许多其他读者。
猜你喜欢
  • 2013-05-16
  • 2017-09-23
  • 2020-10-02
  • 2019-03-24
  • 2023-03-29
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多