Php 过滤多个SQL搜索以构建单个数组-需要指针
我是网络开发新手 这是电话服务的一部分,我正在尝试筛选3个不同的数组,其中包含来自三个数据库搜索的字符串:$sfaa、$sfipc和$sfuaa。我必须筛选这三个数据库阵列以查找可用的客户服务代理。输出将是一个填充了要拨号的IVR_号码的数组 下面是字符串的一个示例:“Id”,“IVR\u Number”,“Market\u Id” 为了从数组中的每个值获取数据,我必须分解字符串。然后根据每个字符串中的一对多id,我必须检查$sfaa中的id是在$sfipc还是$sfuaa中。如果没有,那么我必须用过滤的记录构建一个数组,从那里我必须从$sfaa中找到属于该id的分解字符串中的值。我编写了以下代码,但有一种更简单的方法??我希望。。。。客户端必须等待这些结果,然后才能继续。通常只有10或15条记录 这段代码很有效,我只是想知道是否有更简单的方法来实现这一点 有什么建议吗Php 过滤多个SQL搜索以构建单个数组-需要指针,php,sql,arrays,explode,Php,Sql,Arrays,Explode,我是网络开发新手 这是电话服务的一部分,我正在尝试筛选3个不同的数组,其中包含来自三个数据库搜索的字符串:$sfaa、$sfipc和$sfuaa。我必须筛选这三个数据库阵列以查找可用的客户服务代理。输出将是一个填充了要拨号的IVR_号码的数组 下面是字符串的一个示例:“Id”,“IVR\u Number”,“Market\u Id” 为了从数组中的每个值获取数据,我必须分解字符串。然后根据每个字符串中的一对多id,我必须检查$sfaa中的id是在$sfipc还是$sfuaa中。如果没有,那么我必
// 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、$sfipc和$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]);
}
这可能有助于描述问题所在以及您希望通过上面的代码实现什么。您能举一个$sfaa、$sfipc和$sfuaa值的示例吗?这样我们就可以了解您为什么以这种方式分解数据了……还有(这可能是不正常的,但是……)为什么要将数据库数据作为字符串返回,然后再次解析它们?作为二维数组或查询结果的句柄不是更容易吗?是的,我同意@boisvert,您尝试在数据库之外工作,而在数据库中工作更好。为什么要从数据库中获取三个列表,然后在PHP中尝试匹配它们?只需在SQL中匹配它们,并在PHP中获得最终结果。@boisvert和@Ben来自数据库的结果来自外部服务。所以我无法控制结果的产生方式。下面是字符串
“'Id','IVR\u Number','Market\u Id'”
@pharalia的一个示例,这是电话服务的一部分。我需要一个填充了IVR_号码的数组来拨号。我必须筛选这三个数据库阵列以查找可用的客户服务代理。这段代码很有效,我只是想知道是否有更简单的方法来实现这一点。我希望这有助于澄清问题……谢谢@boisvert,这会更好。我以后确实需要使用这些值,但这取决于IVR系统的流量。另外,我需要字符串中的不同值。因此,如果需要,我将运行类似的程序来获取这些值。再次感谢你的帮助。