Php 过滤多个SQL搜索以构建单个数组-需要指针

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中。如果没有,那么我必

我是网络开发新手

这是电话服务的一部分,我正在尝试筛选3个不同的数组,其中包含来自三个数据库搜索的字符串:$sfaa、$sfipc和$sfuaa。我必须筛选这三个数据库阵列以查找可用的客户服务代理。输出将是一个填充了要拨号的IVR_号码的数组

下面是字符串的一个示例:“Id”,“IVR\u Number”,“Market\u Id”

为了从数组中的每个值获取数据,我必须分解字符串。然后根据每个字符串中的一对多id,我必须检查$sfaa中的id是在$sfipc还是$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、$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系统的流量。另外,我需要字符串中的不同值。因此,如果需要,我将运行类似的程序来获取这些值。再次感谢你的帮助。