我有一个代码来修改外部API提供的数据。但是,我不喜欢我的代码。我相信有一个较短的方法。
让我解释一下流程:
我向api端点请求获取货币短代码。我的意思是$results
包含以下内容:
[0] => EURUSD
[1] => USDTRY
etc...
我想将这些保存为EUR,USD,TRY。我用str_split
来做这件事。另外,我使用array_unique
删除了相同的值。
现在,我的数组包含了这个。
[0] => EUR
[3] => USD
[5] => TRY
这对我来说还不够。我需要根据我的数据库结构更改密钥。
我的表格包含: ID,名称,已创建 我必须将每个密钥重命名为 name 。 (顺便说一句,我使用Phnix进行迁移和播种)
$results = json_decode($httpResponse->getBody());
$data = [];
$prepared = [];
foreach ($results as $key => $item) {
$data = array_merge($data, str_split($item, 3));
}
$data = array_unique($data);
foreach ($data as $key => $item) {
array_push($prepared, ['name' => $item]);
}
$currency = $this->table('currency');
$currency->truncate();
$currency->insert($prepared)->save();
你有什么最好的方法吗?
答案 0 :(得分:1)
在你的代码中你做了很多无用的操作:考虑到字符串的长度总是3个字符,你可以简单地使用substr来获取货币代码并使用货币代码作为键来使你的数组“独特”(如果多次添加相同的货币,将“覆盖”前一个货币,而不会影响最终结果)。
$results = json_decode($httpResponse->getBody());
$prepared = [];
foreach ($results as $item) {
$itemName = substr($item,0,3);
$prepared[$itemName] = ['name' => $itemName];
}
$currency = $this->table('currency');
$currency->truncate();
$currency->insert($prepared)->save();