我正在使用php 7,并且通过json获取投资组合数据。
我想总结一下投资组合并创建以下Google工作表:
最终结果以黄色显示。基本上,如果股票代码来自asset_type
stock
,然后从代码值中求和或减去。
我尝试了以下操作:
<?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
数组。
有人建议我在做什么错吗?
感谢您的答复!