筛选几个SQL搜索以构建单个数组-需要指针


Filtering through several SQL searches to build a single array - need pointers

我是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]);
   }