是否有更简单,更短的方法来执行此代码? [PHP,循环,数组]

时间:2017-10-03 06:35:15

标签: php arrays loops

我有一个代码来修改外部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();

你有什么最好的方法吗?

1 个答案:

答案 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();