我正在尝试找到将一组数组映射到一个数组的最佳方法。
$name = ['Toyota','Toyota','Lexus'];
$invoiceCount= [1,1,2];
$netSales = [28,25,520];
$gp = [6,6,103];
$gpp = [0.2143,0.24,0.1981]
$returnRate = [0,0,0];
$returnRateP = [0,0,0];
$lastOrder = ['2020-06-16','2020-06-16','2020-06-12'];
我要做的是基于$ name数组映射一个数组。
这是我到目前为止所拥有的
$results = array();
for($i = 0; $i < count($name); $i++) {
$results[$oem[$i]] = array(
"IC" => ($results[$name[$i]]['IC'] ?: 0) + $invoiceCount[$i],
"NS" => ($results[$name[$i]]['NS'] ?: 0) + $netSales[$i],
"GP" => ($results[$name[$i]]['GP'] ?: 0) + $gp[$i],
"GPP" => ($results[$name[$i]]['GPP'] ?: 0) + $gpp[$i],
"ReR" => ($results[$name[$i]]['ReR'] ?: 0) + $returnRate[$i],
"RR" => ($results[$name[$i]]['RR'] ?: 0) + $returnRateP[$i],
"OM" => ($results[$name[$i]] = $oem[$i]),
"LO" => ($results[ $oem[$i] ]['LO'] ?:0 ) + $lastOrder[$i],
);
//var_dump($results); die();
}
一切似乎都很好,但是,$ lastOrder是我似乎很难处理的一个。 $ lastOrder似乎在映射订单并出于某种原因添加订单。当我var_dump $ results时,这就是我得到的“ LO”
["Toyota"]=>["LO"]=>int(4040)
["Lexus"]=>["LO"]=>int(2020)
我想要的结果是这个
["Toyota"]=>["LO"]=>['2020-06-16','2020-06-16']
["Lexus"]=>["LO"]=>['2020-06-12']
有什么想法吗?
答案 0 :(得分:0)
看Route::get('/', (function() {
return auth()->user()
? app()->make(\App\Http\Controllers\HomeController::class)->index()
: app()->make(\App\Http\Controllers\BlogController::class)->index();
}));
,看来您想收集所有映射到名称键的日期,因此您需要执行LO
并避免使用array_merge
,因为这些是日期和数组上的+
联合与您所需要的完全不同。该代码段如下所示:
+
对于PHP 5.3或更低版本,您将需要使用"LO" => array_merge(($results[ $oem[$i] ]['LO'] ? $results[ $oem[$i] ]['LO'] : [] ) , [ $lastOrder[$i] ] )
语法而不是array()
,如下所示:
[]
更新:
您的代码应如下所示:
"LO" => array_merge(($results[ $oem[$i] ]['LO'] ? $results[ $oem[$i] ]['LO'] : array() ) , array( $lastOrder[$i] ) )