使用php mysql在超大尺寸多维数组中搜索

时间:2013-12-09 20:04:41

标签: php mysql arrays preg-match

我有一张包含一些多维数组的数百万条记录的表。我需要在每一行中搜索以找到匹配项,密钥匹配在另一个包含数千条记录的表中。

例如,每个人可能有不同的教育数量; (半结肠)。我的目标是在英国研究所的桌子上搜索那些在英国接受教育的人。

Name        | Educations
------------+--------------------------------------------------------------------------
John Smith  | Oxford University, BSc Business, UK ; London University, MSc Art, UK ; Boston University, PhD in AI, USA
Sara Jones  | Ealing college, Access to IT, UK ; Paris University, BSc Maths, France

目前我很乐意使用preg_match,但是将大量的机构列表放入数组中(管道)分隔符似乎不起作用。但是,将阵列限制在1000以下似乎可行。我不确定这是否与数组大小有关?

对于如何使用preg_match或您知道的任何其他搜索功能优化搜索大型数组,我将不胜感激。

以下是我的代码的一部分:

// query a list of institute  
$query = "SELECT institute_name FROM $table_institute limit 1000"; 
$result = mysql_query($query) or die(mysql_error());

// create an array of institute
while($row = mysql_fetch_array($result)) { 
   $institute = trim($row['institute_name']); 
   $institute_array = $institute_array  . "|" . $institute; 
 }

 $institute_array = "/\b(" . $institute_array . ")\b/i";

// create a multidimensional array of educations  
$educations = unserialize ($row['educations']);
$count_education = count($educations);
$educations= implode (" ; " , $educations);
$education_list = (explode (" ; ", $educations));
$education_array = array();

// check and compare both array

if ($educations == NULL ) 
 $code_institute = 'Not Listed';
else {
for($i=0; $i<$count_education; $i++) {
       list ($org, $degree, $major, $start_date, $end_date) = explode(' ,, ', $education_list[$i]);

       $education_array[$i] = array(
   'org' => trim($org),
       'degree' => trim($degree),
   'location' => trim($location)
   );

   if (preg_match ($institute_array, $education_list[$i], $matched)) {
           $code_institute = 'Matched';
       $match_no_institute = $match_no_institute + 1;
    }

   else 
    $code_institute = 'Not Matched';

 print_r ("<br> Education : (" . ($i+1) . ") Matching Time: " . $match_no_institute . " Code: " . $code_institute . "   " . $matched[0]);

    }
} 

1 个答案:

答案 0 :(得分:0)

我可能会弄错,但除非您正在搜索索引列,否则您将遇到不好的时间。我从来没有听说有人试图在LONGTEXT或varchar字段中搜索已经序列化或放入某种阵列方式的“数组”。

一般来说,您应该使用连接表和关联来完成您想要的任务。