根据价值总结投资组合

时间:2020-06-24 06:51:03

标签: php

我正在使用php 7,并且通过json获取投资组合数据。

我想总结一下投资组合并创建以下Google工作表:

enter image description here

最终结果以黄色显示。基本上,如果股票代码来自asset_type stock,然后从代码值中求和或减去。

找到here the spreadsheet

我尝试了以下操作:

<?php

$data = json_decode('[{"owner":"Self","transaction_date":"2020-03-10","asset_type":"stock","trx_type":"sale (partial)","amount_range":"$15,001 - $50,000","symbol":"VWO","name":"Vanguard FTSE Emerging Markets Index Fund ETF Shar"},
{"owner":"Self","transaction_date":"2020-03-10","asset_type":"stock","trx_type":"sale (partial)","amount_range":"$15,001 - $50,000","symbol":"GOOG","name":"Alphabet Inc."},
{"owner":"Self","transaction_date":"2020-03-10","asset_type":"stock","trx_type":"sale (full)","amount_range":"$15,001 - $50,000","symbol":"VWO","name":"Vanguard FTSE Emerging Markets Index Fund ETF Shar"},
{"owner":"Self","transaction_date":"2020-03-10","asset_type":"stock","trx_type":"sale (partial)","amount_range":"$1,001 - $15,000","symbol":"GOOG","name":"Alphabet Inc."},
{"owner":"Self","transaction_date":"2020-03-10","asset_type":"stock","trx_type":"sale (full)","amount_range":"$1,001 - $15,000","symbol":"VWO","name":"Vanguard FTSE Emerging Markets Index Fund ETF Shar"},
{"owner":"Self","transaction_date":"2020-03-10","asset_type":"stock","trx_type":"purchase","amount_range":"$1,001 - $15,000","symbol":"GOOG","name":"Alphabet Inc."},
{"owner":"Self","transaction_date":"2020-03-10","asset_type":"municipal security","trx_type":"purchase","amount_range":"$1,001 - $15,000","symbol":"GOOG","name":"Alphabet Inc."},
{"owner":"Self","transaction_date":"2020-03-10","asset_type":"stock","trx_type":"purchase","amount_range":"$100,000 - $150,000","symbol":"AAPL","name":"Apple Inc."}]');

$portfolio = 0;
$res = [];
foreach ($data as $d1) {
    if ($d1->asset_type === "stock" && !in_array_r($d1->symbol, $res)) { //check if value exists in array
        foreach ($data as $d2) {
            if ($d2->asset_type === "stock" && $d1->symbol === $d2->symbol) {
                $a = array_map('intval', explode(" - ", str_replace(",", "", str_replace("$", "", $d2->amount_range))));
                $avg = array_sum($a) / count($a);
                // string contains - https://stackoverflow.com/questions/4366730/how-do-i-check-if-a-string-contains-a-specific-word
                if (strpos($d2->trx_type, "sale") !== false) {
                    $portfolio -= $avg;
                }
                if (strpos($d2->trx_type, "purchase") !== false) {
                    $portfolio += $avg;
                }
            }
        }
        if ($portfolio > 0) {
            array_push($res, [$d1, $portfolio]);
        }
    }
}

echo $res;

/**
 * Check an array if an item exists
 * @param $item
 * @param $array
 * @return false|int
 */
function in_array_r($item, $array)
{
    return preg_match('/"' . preg_quote($item, '/') . '"/i', json_encode($array));
}

运行此代码后,我得到一个空的$res数组。

有人建议我在做什么错吗?

感谢您的答复!

0 个答案:

没有答案