我有一個具有一些多維數組的數百萬條記錄表。我需要在每一行中搜索以找到一個匹配,關鍵匹配在另一個包含數千條記錄的表中。例如,每個人可能有不同數量的教育分隔;但是,每個人可能有不同的教育數量, (分號)。我想用英國研究所的一張表格搜索那些在英國接受教育的人。在使用php mysql的大型多維數組中搜索
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]);
}
}
看起來像差的原始數據庫設計 - 你應該正常化第一 – 2013-12-09 20:21:40
你不應該使用MySQL來記錄而不是PHP的記錄? –
我同意Dragon。您打算用這種設計將數據存儲在關係數據庫中的目的。將'Educations'分解成多個表格。 – Dave