如何基于PHP中的两列计算数组值?

詹姆斯·伯瑞尔

我有一个多维数组(来自Salesforce SOQL),具有多个结果(准确地说是74个)。每个数组的键和值如下:

array {
    ["ID"] => "Project ID"
    ["Name"] => "Project Name"
    ["Project Type"] => "Type Name"
    ["Project Stage"] => "Stage Name"
    ["Value"] => "Amount"
    ["Capacity"] => "Number"
    ["Project Group 1"] => "Group Name"
    ["Project Group 2"] => "Group Name"
    ["Project Group 3"] => "Group Name"
    ["Project Group 4"] => "Group Name"
}

我要计数取决于结果的数目两者的项目类型和一个项目组,所以我可以翻转这些结果成用于产生CSV的阵列。

目前,我可以使用array_count_values根据项目组的值计算结果的数量array_column这是该结果的代码:

// Project Group 1 Totals
$results = array_count_values(array_column($array, 'Project Group 1'));
foreach($results as $key => $value) {
    if($key === 'Group Name (1)') $key = 'New Group Name (1)';
    if($key === 'Group Name (2)') $key = 'New Group Name (2)';
    $csv_array = array('New Project Group 1 Name', $key, $value);
    fputcsv($output, $csv_array);
}

// Results
array {
    [0] => "New Project Group 1 Name"
    [1] => "New Group Name (1)"
    [2] => (Number)
}
array {
    [0] => "New Project Group 1 Name"
    [1] => "New Group Name (2)"
    [2] => (Number)
}

我如何以每种项目类型划分这些结果的任何方式,以便最终的CSV数组如下所示?

array {
    [0] => "New Project Group 1 Name"
    [1] => "New Group Name (1)"
    [2] => (Number)
    [3] => "Project Type Name"
}
array {
    [0] => "New Project Group 1 Name"
    [1] => "New Group Name (2)"
    [2] => (Number)
    [3] => "Project Type Name"
}
詹姆斯·伯瑞尔

好。我想通了。

由于这个答案(https://stackoverflow.com/a/39035322/4220832),我得到了主意,停止使用array_count_values,并array_column在两个独立的,公正的工作foreach循环。

解决方法如下:

$count = [];
foreach($array as $result) {
    $search = $result['Project Type'] . ',' . $result['Project Group 1'];
    if(!isset($count[$search])) {
        $count[$search] = 1;
    } else {
        $count[$search] += 1;
    }
}
foreach($count as $key => $value) {
    if($key === 'Project Type,Old Project Group Value') $key = 'Project Type,New Project Group Value';
    $split = explode(',', $key);
    $csv_array = array($split[0], $split[1], 'New Project Group 1 Name', $value);
    //echo'<pre>';print_r($csv_array);echo'</pre>'; // For Testing Purposes To Use
    fputcsv($output, $csv_array);
}

我希望这一发现对需要它的人有所帮助。最好将这个解决方案简化为项目中可以使用的功能,以便反复使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章