我是web开发的新手。
这是电话服务的一部分,我正在尝试筛选3个不同的数组,这些数组中充满了来自三个数据库搜索的字符串:$sfaa、$sfpc和$sfuaa。我必须筛选三个数据库阵列,以查找可用的客户服务代理。输出将是一个数组,其中填充了要拨号的IVR_Number。
以下是字符串示例:"'Id','IVR_Number','Market_Id'"
为了从数组中的每个值中获取数据,我必须分解字符串。然后,根据每个字符串中的一对多id,我必须检查来自$sfaa的id是否在$sfpc或$sfuaa中。如果没有,那么我必须用过滤后的记录构建一个数组,从那里我必须从$sfaa中的分解字符串中找到一个属于该id的值。我写了下面的代码,但必须有一个更简单的方法??我希望。。。。客户端必须等待这些结果才能继续。通常只有10或15条记录。
这个代码有效我只是想知道是否有更简单的方法来完成这个
任何提示
// formalua needed to filter above results and fill $aadl array
// explode each active agent array
$activeagentsfec=0;
$aaivra= array();
$aaida= array();
foreach ($sfaa as $aavalue)
{
${'aadetails'.$activeagentsfec} = explode("'",$aavalue);
${'aaivr'.$activeagentsfec} = ${'aadetails'.$activeagentsfec}[5];
${'aaid'.$activeagentsfec} = ${'aadetails'.$activeagentsfec}[1];
array_push($aaivra, ${'aaivr'.$activeagentsfec});
array_push($aaida,${'aaid'.$activeagentsfec});
$activeagentsfec++;
}
// explode each inprogress call array
$activecallsfec=0;
$actida= array();
$acfida= array();
foreach ($sfipc as $acvalue)
{
${'acdetails'.$activecallsfec} = explode("'",$acvalue);
${'actid'.$activecallsfec} = ${'acdetails'.$activecallsfec}[5];
${'acfid'.$activecallsfec} = ${'acdetails'.$activecallsfec}[7];
array_push($actida, ${'actid'.$activecallsfec});
array_push($acfida, ${'acfid'.$activecallsfec});
$activecallsfec++;
}
// explode each unvailable agent
$unavailableagentsfec=0;
$uaaida= array();
foreach ($sfuaa as $uavalue)
{
${'uadetails'.$unavailableagentsfec} = explode("'",$uavalue);
${'uaaid'.$unavailableagentsfec} = ${'uadetails'.$unavailableagentsfec}[3];
array_push($uaaida, ${'uaaid'.$unavailableagentsfec});
$unavailableagentsfec++;
}
// create available agent array by id
$aaafec=0;
$aada= array();
foreach ($aaida as $aaidavalue)
{
if (in_array($aaidavalue,$actida,true))
$aaafec++;
elseif(in_array($aaidavalue,$acfida,true))
$aaafec++;
elseif(in_array($aaidavalue,$uaaida,true))
$aaafec++;
else
array_push($aada, $aaidavalue);
}
// available agent arry by ivr
$aadl= array();
foreach ($aada as $aadavalue)
{
$aaaivrsv= array_search($aadavalue,$aaida,true);
array_push($aadl,$aaivra[$aaaivrsv]);
}
鉴于您在评论中所说的内容,我将尝试给您一些有用的想法。。。
-
您执行了与解析$sfaa、$sfpc和$sfuaa大致相同的过程-爆炸,获得某些列。如果你有某种方法来抽象这个过程,使用一个用于解析的通用函数,以更好的格式返回数据,在每个数组上调用三次,你会更好地理解你的代码。
-
同样,您的流程与数据的当前状态紧密耦合——例如,
${'acdetails'.$activecallsfec}[5];
是您今天的第五个项目,但它会一直是吗?一些通用的东西,即你按名称查找列,可能会为你省去很多麻烦。。。 -
最后,在合并数据时,如果先对数据进行排序,则合并速度会快得多——在M的列表中查找N个项目,使用未排序的列表需要O(N*M)个操作,但如果两者都进行了排序,则为O(min(M,N))。
我花时间仔细检查了你的代码。。。除非你在其他地方使用它的一些变量,否则这里有一个更短的等价物:
// formula needed to filter above results and fill $aadl array
// explode each active agent array
$aaivra= array();
$aaida= array();
foreach ($sfaa as $aavalue)
{
$a = explode("'",$aavalue);
array_push($aaivra, $a[5]);
array_push($aaida,$a[1]);
}
// explode each inprogress call array
$actida= array();
$acfida= array();
foreach ($sfipc as $acvalue)
{
$a = explode("'",$acvalue);
array_push($actida, $a[5]);
array_push($acfida, $a[7]);
}
// explode each unvailable agent
$uaaida= array();
foreach ($sfuaa as $uavalue)
{
$a= explode("'",$uavalue);
array_push($uaaida, $a[3]);
}
// create available agent array by id
$aada= array();
foreach ($aaida as $aaidavalue)
{
if (!in_array($aaidavalue,$actida,true) &&
!in_array($aaidavalue,$acfida,true) &&
!in_array($aaidavalue,$uaaida,true))
array_push($aada, $aaidavalue);
}
// available agent arry by ivr
$aadl= array();
foreach ($aada as $aadavalue)
{
$aaaivrsv= array_search($aadavalue,$aaida,true);
array_push($aadl,$aaivra[$aaaivrsv]);
}