繁体   English   中英

将数据添加到关联数组

[英]Adding data to associative array

我在填充数组时遇到问题。 我有一个csv文件,其中有1列包含一些ID。 我加载并处理csv并最终得到一个像这样的数组

array:5 [▼
  0 => array:2 [▼
    0 => "ID123"
  ]
  1 => array:2 [▼
    0 => "ID234"
  ]
  2 => array:2 [▼
    0 => "ID345"
  ]
  3 => array:2 [▼
    0 => "ID456"
  ]
  4 => array:2 [▼
    0 => "ID567"
  ]
]

使用这些ID,我点击了ID上的API以获取特定于该ID的数据。 所以我循环包含ID的数组,并执行以下操作

$jobData = array();

foreach($csv as $data) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.somdomain/some.api/get/".$data[0].");
    //other curl stuff

    $output = curl_exec($ch);
    $output = new \SimpleXMLElement($output);
}

现在,如果我输出输出的结果,我会得到这样的东西

SimpleXMLElement {#352 ▼
  +"Job": SimpleXMLElement {#383 ▼
    +"ID": "ID123"
    +"Client": SimpleXMLElement {#387 ▼
      +"ID": "12345"
    }
    +"Assigned": SimpleXMLElement {#392 ▼
      +"Staff": array:5 [▼
        0 => SimpleXMLElement {#403 ▼
          +"ID": "12345"
        }
        1 => SimpleXMLElement {#404 ▼
          +"ID": "23456"
        }
        2 => SimpleXMLElement {#405 ▼
          +"ID": "34567"
        }
      ]
    }
  }
}

因此,我需要建立一个数组,其中包含我拥有的所有ID的数据。 所以在上面的foreach循环中,我正在做这样的事情

foreach($csv as $data) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.somdomain/some.api/get/".$data[0].");
    //other curl stuff

    $output = curl_exec($ch);
    $output = new \SimpleXMLElement($output);

    if (!empty($output)) {
        $jData['jobInfo'] = array(
            'clientId' => (string)$output->Job->Client->ID,
            'startDate' => '20160701',
            'dueDate' => '20160731'
        );

        if(!empty($output->Job->Assigned->Staff)) {
            foreach ($output->Job->Assigned->Staff as $staff) {
                $jData['staffInfo'][] = array(
                    'staffId' => (string)$staff->ID
                );
            }
        }
    }
    $jobData[] = $jData;
}

现在这工作到一定程度。 我添加了一个额外的[] onyo staffInfo元素,因为如上面的输出所示,可以有1个以上的工作人员。 我上面的问题是,它似乎重复了一些东西。 所以jobData数组的输出如下

array:5 [▼
  0 => array:4 [▼
    "jobInfo" => array:4 [▶]
    "staffInfo" => array:5 [▶]
  ]
  1 => array:4 [▼
    "jobInfo" => array:4 [▶]
    "staffInfo" => array:6 [▶]
  ]
  2 => array:4 [▼
    "jobInfo" => array:4 [▶]
    "staffInfo" => array:7 [▶]
  ]
  3 => array:4 [▼
    "jobInfo" => array:4 [▶]
    "staffInfo" => array:8 [▶]
  ]
  4 => array:4 [▼
    "jobInfo" => array:4 [▶]
    "staffInfo" => array:15 [▶]
  ]
]

如您所见,元素0的staffInfo数组大小为5。 元素1增加到6,元素2为7,元素3为8,元素4为15。如果我手动检查API调用的系统,则元素0应该有5个正确。 元素1应该有1,元素2应该有1,元素3应该有1,元素4应该有7。

那么,如何停止将以前的循环结果添加到下一个结果呢?

谢谢

您无需在任何地方初始化$jData 这是一个坏习惯。 结果,它总是相同的。 您将继续覆盖jobInfo ,并继续添加到staffInfo

您需要在每次迭代的开始时初始化数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM