- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发 cakephp 项目,我必须在其中生成报告。我有两个表,一个表存储客户的值(value),另一个表存储分配给每个用户的潜在客户的值(value)。每个线索都有地位。如果状态为0,我想增加progressleads的计数器,如果status为1,则wonleads的计数器应该增加,依此类推...
我正在连接两个表并获取像这样的数组=>
Array
(
[0] => Array
(
[Customer] => Array
(
[id] => 14
[name] => ABC
)
[Opportunity] => Array
(
[status] => 0
[value] => 50000
)
)
[1] => Array
(
[Customer] => Array
(
[id] => 14
[name] => ABC
)
[Opportunity] => Array
(
[status] => 1
[value] => 10000
)
)
[2] => Array
(
[Customer] => Array
(
[id] => 14
[name] => ABC
)
[Opportunity] => Array
(
[status] => 1
[value] => 7500
)
)
[3] => Array
(
[Customer] => Array
(
[id] => 15
[name] => DEF
)
[Opportunity] => Array
(
[status] => 0
[value] => 45000
)
)
[4] => Array
(
[Customer] => Array
(
[id] => 19
[name] => ST
)
[Opportunity] => Array
(
[status] => 2
[value] => 50000
)
)
[5] => Array
(
[Customer] => Array
(
[id] => 16
[name] => TEST
)
[Opportunity] => Array
(
[status] => 2
[value] => 1000000
)
)
[6] => Array
(
[Customer] => Array
(
[id] => 19
[name] => ST
)
[Opportunity] => Array
(
[status] => 0
[value] => 1000
)
)
[7] => Array
(
[Customer] => Array
(
[id] => 14
[name] => ABC
)
[Opportunity] => Array
(
[status] => 0
[value] =>
)
)
)
从这个数组中,我希望为每个用户提供一条记录,其中包含总潜在客户、正在进行的潜在客户、赢得的潜在客户计数器。我尝试过以下代码:-
$customerdetails = array();
$totalopp = 0;
$progressopp = 0;
$oppval = 0;
$wonopp = 0;
$lostopp = 0;
$billedopp = 0;
$onholdopp = 0;
$newcustid = NULL;
foreach($customer as $k => $val){
$custid = $val["Customer"]["id"];
if($newcustid != $custid){
$oppstatus = $val["Opportunity"]["status"];
$oppval += $val["Opportunity"]["opo_value"];
$totalopp++;
if($oppstatus == 0){
$progressopp++;
}
if($oppstatus == 1){
$wonopp++;
}
if($oppstatus == 2){
$lostopp++;
}
if($oppstatus == 3){
$billedopp++;
}
if($oppstatus == 4){
$onholdopp++;
}
$newcustid = $custid;
}
$customerdetails[$custid]["customername"] = $val["Customer"]["customer_name"];
$customerdetails[$custid]["opportunities"] = $totalopp;
$customerdetails[$custid]["value"] = $oppval;
$customerdetails[$custid]["inprogress"] = $progressopp;
$customerdetails[$custid]["won"] = $wonopp;
$customerdetails[$custid]["lost"] = $lostopp;
$customerdetails[$custid]["billed"] = $billedopp;
$customerdetails[$custid]["onhold"] = $onholdopp;
}
打印 $customerdetails 数组后,我得到以下结果 =>
Array
(
[14] => Array
(
[customername] => ABC
[opportunities] => 6
[value] => 1146000
[inprogress] => 4
[won] => 0
[lost] => 2
[billed] => 0
[onhold] => 0
)
[15] => Array
(
[customername] => DEF
[opportunities] => 2
[value] => 95000
[inprogress] => 2
[won] => 0
[lost] => 0
[billed] => 0
[onhold] => 0
)
[19] => Array
(
[customername] => ST
[opportunities] => 5
[value] => 1146000
[inprogress] => 3
[won] => 0
[lost] => 2
[billed] => 0
[onhold] => 0
)
[16] => Array
(
[customername] => TEST
[opportunities] => 4
[value] => 1145000
[inprogress] => 2
[won] => 0
[lost] => 2
[billed] => 0
[onhold] => 0
)
)
正如您所看到的,只有 4 个线索分配给 ABC,但它显示的机会为 6 个,类似地,其他计数器也显示不正确。谁能帮助我我在这里做错了什么?
最佳答案
我认为您在这里应用了错误的逻辑。 array_column会成功的。请参阅以下代码。
<?php
$customers=array_column($result,'customer');
$opportunity=array_column($result,'opportunity');
$finalResult=array();
foreach($customers as $k=>$customer) {
$opp=$opportunity[$k];
if(!array_key_exists($customer["id"],$finalResult)) {
$finalResult[$customer["id"]]=array();
$finalResult[$customer["id"]]["opportunities"]=0;
$finalResult[$customer["id"]]["value"]=0;
$finalResult[$customer["id"]]["inprogress"]=0;
$finalResult[$customer["id"]]["won"]=0;
$finalResult[$customer["id"]]["lost"]=0;
$finalResult[$customer["id"]]["billed"]=0;
$finalResult[$customer["id"]]["onhold"]=0;
}
$finalResult[$customer["id"]]["customerid"]=$customer["id"];
$finalResult[$customer["id"]]["customername"]=$customer["name"];
$finalResult[$customer["id"]]["opportunities"]++;
$finalResult[$customer["id"]]["value"]+=$opp["value"];
if($opp["status"]==0) {
$finalResult[$customer["id"]]["inprogress"]++;
}
if($opp["status"]==1) {
$finalResult[$customer["id"]]["won"]++;
}
if($opp["status"]==2) {
$finalResult[$customer["id"]]["lost"]++;
}
if($opp["status"]==3) {
$finalResult[$customer["id"]]["billed"]++;
}
if($opp["status"]==4) {
$finalResult[$customer["id"]]["onhold"]++;
}
}
?>
您只需分别获取客户列和机会列,然后遍历客户列即可。
现在,当您遍历时,首先通过将值保存在 $finalResult
数组中来检查您是否已经找到该客户。如果是,则相应地增加计数器,如果不创建数组,则相应地增加计数器。
我认为这会成功。
输出数组可能如下所示:
Array
(
[14] => Array
(
[opportunities] => 4
[value] => 13500
[inprogress] => 2
[won] => 2
[lost] => 0
[billed] => 0
[onhold] => 0
[customerid] => 14
[customername] => ABC
)
[15] => Array
(
[opportunities] => 1
[value] => 45000
[inprogress] => 1
[won] => 0
[lost] => 0
[billed] => 0
[onhold] => 0
[customerid] => 15
[customername] => DEF
)
[19] => Array
(
[opportunities] => 2
[value] => 51000
[inprogress] => 1
[won] => 0
[lost] => 1
[billed] => 0
[onhold] => 0
[customerid] => 19
[customername] => ST
)
[16] => Array
(
[opportunities] => 1
[value] => 100000
[inprogress] => 0
[won] => 0
[lost] => 1
[billed] => 0
[onhold] => 0
[customerid] => 16
[customername] => TEST
)
)
关于php - 在 php foreach 中明智地增加计数器状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37740286/
我有一个包含 1+N 个线程和 N 个 FIFO 队列的程序,例如:FIFO_queue_t* fifo_queque[N]。一个线程负责填充这 N 个 FIFO 队列。并且其他每个线程都与 1 个
我正在使用 Wise Installer Editor 编写 .msi,并且我想将所有文件复制到注册表项中指定的目录中。 我如何在 Wise 中指定这一点? 提前致谢, 埃内斯托 最佳答案 您可以尝试
我们有一个场景,其中我们尝试获取附加的磁盘虚拟机以及分配给这些磁盘的相应总空间。是否有任何命令或脚本可以获取详细信息? 我已使用命令 Get-AzureDisk 获取输出,但它没有显示列表中的所有虚拟
我有一个包含多个派生类的类,每个派生类都有自己的构造函数。 class A { public: static A *create_new_A(int child_ID);
我有一个小问题:) 我计划建立一个相当不寻常的 web 项目,大约有 1000 个页面,其中不会有经典的导航(仅适用于关于页面和联系人),并且所有页面都不会链接到一个又一个。 它的索引 > 打开随机页
我们的应用程序中有一些数据。有时它会被保存,所以我们为它做了一个实体和一个 NSManagedObject 子类。但是,通常情况下,对象将被实例化并且永远不会保存。我正在考虑使用另一个具有 NSInM
假设我有一个表如下: Class | Subject | Student | Marks ---------------------------------------- 1
刚刚在我正在编写的一些代码中偶然发现了这种情况,并且很好奇“正确”的方法是什么。举例来说,我有一大堆对象,我需要按某个属性对其进行分组,但组的顺序很重要。 例如。对象: var obj = {
如何在 Android 应用 Activity 中启用 Mutli 窗口选项? 我尝试在两个单独的 Activity 中使用 AndroidManifest Activity 属性 android:r
我发现 ear 插件覆盖了 war 插件并阻止调用 war 任务。我通过直接调用它来绕过它。 这是远程明智的还是我应该放弃并转向 eclipse 和 gradle 中的多项目设置? ear {
我们的安装程序是用 Inno Setup 编写的,我们实际上对它非常满意。然而,一些客户不断要求他们可以更轻松地通过 Active Directory 分发 MSI 安装程序。通过扩展 Inno Se
我正在尝试使用 Visual Studio 2017 (v15.4.5) 将现有的 WCF Web API(针对 .NET Framework 4.6.1)移植到 ASP.Net Core 2,但在找
我是一名优秀的程序员,十分优秀!