将数组映射到单个数组php

时间:2020-06-19 09:53:47

标签: php arrays

我正在尝试找到将一组数组映射到一个数组的最佳方法。

$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']

有什么想法吗?

1 个答案:

答案 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] ) )