***更新:谢谢大家的所有答案!由于你的回复,我找到了解决问题的另一种方法!
$find = array('ACH', 'AER', 'AERG', 'AGL', 'AIRE', 'ALL', 'ANGL', 'ARC', 'ART', 'AUT', 'AV', 'BASE', 'BD', 'BER', 'BORD', 'BRE', 'BRG', 'BRTL', 'BSN', 'CAE','CALL', 'CAMI', 'CAMP', 'CAN', 'CAR', 'CARE', 'CASR', 'CC', 'CD', 'CF', 'CHA', 'CHE', 'CHEM', 'CHL', 'CHP', 'CHS', 'CHT', 'CHV', 'CITE', 'CIVE','CLOS', 'CLR', 'COIN', 'COL', 'COR', 'CORO', 'COTE', 'COUR', 'CPG', 'CR', 'CRS', 'CRX','CTR', 'CTRE', 'DARS', 'DEVI', 'DIG', 'DOM', 'DRA', 'DSC', 'ECA', 'ECL', 'EMBR', 'EMP', 'ENC', 'ENV', 'ESC', 'ESP', 'ESPA', 'ETNG', 'FD', 'FG','FON', 'FOR', 'FORT', 'FOS', 'FRM', 'GAL', 'GARE', 'GBD', 'GPL', 'GR', 'GREV', 'HAB', 'HAM', 'HIP', 'HLE', 'HLG', 'HLM', 'HTR', 'ILE', 'ILOT', 'IMP', 'JARD', 'JTE', 'LAC', 'LEVE','LICE', 'LIGN', 'LOT', 'MAIL', 'MAIS', 'MAR', 'MARE', 'MAS', 'MNE', 'MRN', 'MTE', 'NTE', 'PAE', 'PARC', 'PAS', 'PASS', 'PCH', 'PCHE', 'PHAR', 'PIST','PKG', 'PL', 'PLA', 'PLAG', 'PLAN', 'PLCI', 'PLE', 'PLN', 'PLT', 'PNT', 'PONT', 'PORQ', 'PORT', 'POST', 'POT', 'PROM', 'PRT', 'PRV', 'PTA', 'PTE', 'PTR', 'PTTE', 'QUA', 'QUAI', 'RAC', 'REM', 'RES','RIVE', 'RLE', 'ROC', 'RPE', 'RPT', 'RTD', 'RTE', 'RUE', 'RUET', 'RUIS', 'RULT', 'RVE', 'SAS', 'SEN', 'SQ', 'STDE', 'TER', 'TOUR', 'TPL', 'TRA','TRAB', 'TRN', 'TRT', 'TSSE', 'TUN', 'VAL', 'VALL', 'VC', 'VCHE', 'VEN', 'VGE', 'VIA','VIAD', 'VIL', 'VLA', 'VOIE', 'VOIR', 'VOUT', 'VOY', 'VTE', 'ZA', 'ZAC', 'ZAD', 'ZI', 'ZONE', 'ZUP');
$replace = array('ANCIEN CHEMIN', 'AERODROME', 'AEROGARE', 'AGGLOMERATION', 'AIRE', 'ALLEE', 'ANGLE', 'ARCADE', 'ANCIENNE ROUTE', 'AUTOROUTE', 'AVENUE', 'BASE', 'BOULEVARD', 'BERGE', 'BORD', 'BARRIERE', 'BOURG', 'BRETELLE', 'BASSIN', 'CARRIERA', 'CALLE, CALLADA', 'CAMIN', 'CAMP', 'CANAL', 'CARREFOUR', 'CARRIERE', 'CASERNE', 'CHEMIN COMMUNAL', 'CHEMIN DEPARTEMENTAL', 'CHEMIN FORESTIER', 'CHASSE', 'CHEMIN', 'CHEMINEMENT', 'CHALET', 'CHAMP', 'CHAUSSEE', 'CHATEAU', 'CHEMIN VICINAL', 'CITE', 'COURSIVE','CLOS', 'COULOIR', 'COIN', 'COL', 'CORNICHE', 'CORON', 'COTE', 'COUR', 'CAMPING', 'CHEMIN RURAL', 'COURS', 'CROIX','CONTOUR', 'CENTRE', 'DARSE, DARCE', 'DEVIATION', 'DIGUE', 'DOMAINE', 'DRAILLE', 'DESCENTE', 'ECART', 'ECLUSE', 'EMBRANCHEMENT', 'EMPLACEMENT', 'ENCLOS', 'ENCLAVE', 'ESCALIER', 'ESPLANADE', 'ESPACE', 'ETANG', 'FOND', 'FAUBOURG','FONTAINE', 'FORET', 'FORT', 'FOSSE', 'FERME', 'GALERIE', 'GARE', 'GRAND BOULEVARD', 'GRANDE PLACE', 'GRANDE RUE', 'GREVE', 'HABITATION', 'HAMEAU', 'HIPPODROME', 'HALLE', 'HALAGE', 'HLM', 'HAUTEUR', 'ILE', 'ILOT', 'IMPASSE', 'JARDIN', 'JETEE', 'LAC', 'LEVEE', 'LICES','LIGNE', 'LOTISSEMENT', 'MAIL', 'MAISON', 'MARCHE', 'MARE', 'MAS', 'MORNE', 'MARINA', 'MONTEE', 'NOUVELLE ROUTE', 'PETITE AVENUE', 'PARC', 'PASSAGE', 'PASSE', 'PETIT CHEMIN', 'PORCHE', 'PHARE', 'PISTE', 'PARKING','PLACE', 'PLACA', 'PLAGE', 'PLAN', 'PLACIS', 'PASSERELLE', 'PLAINE', 'PLATEAU', 'POINTE', 'PONT', 'PORTIQUE', 'PORT', 'POSTE', 'POTERNE', 'PROMENADE', 'PETITE ROUTE', 'PARVIS', 'PETITE ALLEE', 'PORTE', 'PETITE RUE', 'PLACETTE', 'QUARTIER', 'QUAI', 'RACCOURCI', 'REMPART', 'RESIDENCE','RIVE', 'RUELLE', 'ROCADE', 'RAMPE', 'ROND-POINT', 'ROTONDE', 'ROUTE', 'RUE', 'RUETTE', 'RUISSEAU', 'RUELLETTE', 'RAVINE', 'SAS', 'SENTIER, SENTE', 'SQUARE', 'STADE', 'TERRE', 'TOUR', 'TERRE-PLEIN', 'TRAVERSE','TRABOULE', 'TERRAIN', 'TERTRE', 'TERRASSE', 'TUNNEL', 'VAL', 'VALLON, VALLEE', 'VOIE COMMUNALE', 'VIEUX CHEMIN', 'VENELLE', 'VILLAGE', 'VIA','VIADUC', 'VILLE', 'VILLA', 'VOIE', 'VOIRIE', 'VOUTE', 'VOYEUL', 'VIEILLE ROUTE', 'ZA', 'ZAC', 'ZAD', 'ZI', 'ZONE', 'ZUP');
$arr = array_combine($find, $replace);
foreach ($resultat as $enreg) { // extrait chaque ligne une à une
echo $arr[$enreg['nature']];
}
每个人都过得愉快;)
在我的代码中,我需要用实际术语替换缩写。
我目前使用带有数组的str_replace来查找要用实际术语更改的缩写,这是我的代码:
foreach ($resultat as $enreg) {
$enreg['nature'] = str_replace(
array('ACH', 'AER', 'AERG', 'AGL', 'AIRE', 'ALL', 'ANGL', 'ARC', 'ART', 'AUT', 'AV', 'BASE', 'BD', 'BER', 'BORD', 'BRE', 'BRG', 'BRTL', 'BSN', 'CAE','CALL', 'CAMI', 'CAMP', 'CAN', 'CAR', 'CARE', 'CASR', 'CC', 'CD', 'CF', 'CHA', 'CHE', 'CHEM', 'CHL', 'CHP', 'CHS', 'CHT', 'CHV', 'CITE', 'CIVE','CLOS', 'CLR', 'COIN', 'COL', 'COR', 'CORO', 'COTE', 'COUR', 'CPG', 'CR', 'CRS', 'CRX','CTR', 'CTRE', 'DARS', 'DEVI', 'DIG', 'DOM', 'DRA', 'DSC', 'ECA', 'ECL', 'EMBR', 'EMP', 'ENC', 'ENV', 'ESC', 'ESP', 'ESPA', 'ETNG', 'FD', 'FG','FON', 'FOR', 'FORT', 'FOS', 'FRM', 'GAL', 'GARE', 'GBD', 'GPL', 'GR', 'GREV', 'HAB', 'HAM', 'HIP', 'HLE', 'HLG', 'HLM', 'HTR', 'ILE', 'ILOT', 'IMP', 'JARD', 'JTE', 'LAC', 'LEVE','LICE', 'LIGN', 'LOT', 'MAIL', 'MAIS', 'MAR', 'MARE', 'MAS', 'MNE', 'MRN', 'MTE', 'NTE', 'PAE', 'PARC', 'PAS', 'PASS', 'PCH', 'PCHE', 'PHAR', 'PIST','PKG', 'PL', 'PLA', 'PLAG', 'PLAN', 'PLCI', 'PLE', 'PLN', 'PLT', 'PNT', 'PONT', 'PORQ', 'PORT', 'POST', 'POT', 'PROM', 'PRT', 'PRV', 'PTA', 'PTE', 'PTR', 'PTTE', 'QUA', 'QUAI', 'RAC', 'REM', 'RES','RIVE', 'RLE', 'ROC', 'RPE', 'RPT', 'RTD', 'RTE', 'RUE', 'RUET', 'RUIS', 'RULT', 'RVE', 'SAS', 'SEN', 'SQ', 'STDE', 'TER', 'TOUR', 'TPL', 'TRA','TRAB', 'TRN', 'TRT', 'TSSE', 'TUN', 'VAL', 'VALL', 'VC', 'VCHE', 'VEN', 'VGE', 'VIA','VIAD', 'VIL', 'VLA', 'VOIE', 'VOIR', 'VOUT', 'VOY', 'VTE', 'ZA', 'ZAC', 'ZAD', 'ZI', 'ZONE', 'ZUP'),
array('ANCIEN CHEMIN', 'AERODROME', 'AEROGARE', 'AGGLOMERATION', 'AIRE', 'ALLEE', 'ANGLE', 'ARCADE', 'ANCIENNE ROUTE', 'AUTOROUTE', 'AVENUE', 'BASE', 'BOULEVARD', 'BERGE', 'BORD', 'BARRIERE', 'BOURG', 'BRETELLE', 'BASSIN', 'CARRIERA', 'CALLE, CALLADA', 'CAMIN', 'CAMP', 'CANAL', 'CARREFOUR', 'CARRIERE', 'CASERNE', 'CHEMIN COMMUNAL', 'CHEMIN DEPARTEMENTAL', 'CHEMIN FORESTIER', 'CHASSE', 'CHEMIN', 'CHEMINEMENT', 'CHALET', 'CHAMP', 'CHAUSSEE', 'CHATEAU', 'CHEMIN VICINAL', 'CITE', 'COURSIVE','CLOS', 'COULOIR', 'COIN', 'COL', 'CORNICHE', 'CORON', 'COTE', 'COUR', 'CAMPING', 'CHEMIN RURAL', 'COURS', 'CROIX','CONTOUR', 'CENTRE', 'DARSE, DARCE', 'DEVIATION', 'DIGUE', 'DOMAINE', 'DRAILLE', 'DESCENTE', 'ECART', 'ECLUSE', 'EMBRANCHEMENT', 'EMPLACEMENT', 'ENCLOS', 'ENCLAVE', 'ESCALIER', 'ESPLANADE', 'ESPACE', 'ETANG', 'FOND', 'FAUBOURG','FONTAINE', 'FORET', 'FORT', 'FOSSE', 'FERME', 'GALERIE', 'GARE', 'GRAND BOULEVARD', 'GRANDE PLACE', 'GRANDE RUE', 'GREVE', 'HABITATION', 'HAMEAU', 'HIPPODROME', 'HALLE', 'HALAGE', 'HLM', 'HAUTEUR', 'ILE', 'ILOT', 'IMPASSE', 'JARDIN', 'JETEE', 'LAC', 'LEVEE', 'LICES','LIGNE', 'LOTISSEMENT', 'MAIL', 'MAISON', 'MARCHE', 'MARE', 'MAS', 'MORNE', 'MARINA', 'MONTEE', 'NOUVELLE ROUTE', 'PETITE AVENUE', 'PARC', 'PASSAGE', 'PASSE', 'PETIT CHEMIN', 'PORCHE', 'PHARE', 'PISTE', 'PARKING','PLACE', 'PLACA', 'PLAGE', 'PLAN', 'PLACIS', 'PASSERELLE', 'PLAINE', 'PLATEAU', 'POINTE', 'PONT', 'PORTIQUE', 'PORT', 'POSTE', 'POTERNE', 'PROMENADE', 'PETITE ROUTE', 'PARVIS', 'PETITE ALLEE', 'PORTE', 'PETITE RUE', 'PLACETTE', 'QUARTIER', 'QUAI', 'RACCOURCI', 'REMPART', 'RESIDENCE','RIVE', 'RUELLE', 'ROCADE', 'RAMPE', 'ROND-POINT', 'ROTONDE', 'ROUTE', 'RUE', 'RUETTE', 'RUISSEAU', 'RUELLETTE', 'RAVINE', 'SAS', 'SENTIER, SENTE', 'SQUARE', 'STADE', 'TERRE', 'TOUR', 'TERRE-PLEIN', 'TRAVERSE','TRABOULE', 'TERRAIN', 'TERTRE', 'TERRASSE', 'TUNNEL', 'VAL', 'VALLON, VALLEE', 'VOIE COMMUNALE', 'VIEUX CHEMIN', 'VENELLE', 'VILLAGE', 'VIA','VIADUC', 'VILLE', 'VILLA', 'VOIE', 'VOIRIE', 'VOUTE', 'VOYEUL', 'VIEILLE ROUTE', 'ZA', 'ZAC', 'ZAD', 'ZI', 'ZONE', 'ZUP'),
$enreg['nature']
);
echo $enreg['nature']; };
这里的问题是str_replace对缩写' PL'并不严格。因为它将被替换为' PLACE'和' PLACA',因为' PL'是在PLA'也是缩写......
如何制作一个只能用更严格的研究取代缩写的str_replace(替换' PL' for' PLACE'而不是' PLACACE'因为' PL'也是PLA'缩写,例如)?
答案 0 :(得分:1)
您可以使用缩写值创建基于交替的正则表达式,并使用单词边界仅将它们作为整个单词匹配在文本中,并使用preg_replace_callback
,您可以使用相应的替换值替换每个匹配项。如果您创建一个数组,其缩写将是键,并且替换将是值(为此目的使用array_combine
)将更方便。
建议解决方案可能看起来像
$find = array('ACH', 'AER', 'AERG', 'AGL', 'AIRE', 'ALL', 'ANGL', 'ARC', 'ART', 'AUT', 'AV', 'BASE', 'BD', 'BER', 'BORD', 'BRE', 'BRG', 'BRTL', 'BSN', 'CAE','CALL', 'CAMI', 'CAMP', 'CAN', 'CAR', 'CARE', 'CASR', 'CC', 'CD', 'CF', 'CHA', 'CHE', 'CHEM', 'CHL', 'CHP', 'CHS', 'CHT', 'CHV', 'CITE', 'CIVE','CLOS', 'CLR', 'COIN', 'COL', 'COR', 'CORO', 'COTE', 'COUR', 'CPG', 'CR', 'CRS', 'CRX','CTR', 'CTRE', 'DARS', 'DEVI', 'DIG', 'DOM', 'DRA', 'DSC', 'ECA', 'ECL', 'EMBR', 'EMP', 'ENC', 'ENV', 'ESC', 'ESP', 'ESPA', 'ETNG', 'FD', 'FG','FON', 'FOR', 'FORT', 'FOS', 'FRM', 'GAL', 'GARE', 'GBD', 'GPL', 'GR', 'GREV', 'HAB', 'HAM', 'HIP', 'HLE', 'HLG', 'HLM', 'HTR', 'ILE', 'ILOT', 'IMP', 'JARD', 'JTE', 'LAC', 'LEVE','LICE', 'LIGN', 'LOT', 'MAIL', 'MAIS', 'MAR', 'MARE', 'MAS', 'MNE', 'MRN', 'MTE', 'NTE', 'PAE', 'PARC', 'PAS', 'PASS', 'PCH', 'PCHE', 'PHAR', 'PIST','PKG', 'PL', 'PLA', 'PLAG', 'PLAN', 'PLCI', 'PLE', 'PLN', 'PLT', 'PNT', 'PONT', 'PORQ', 'PORT', 'POST', 'POT', 'PROM', 'PRT', 'PRV', 'PTA', 'PTE', 'PTR', 'PTTE', 'QUA', 'QUAI', 'RAC', 'REM', 'RES','RIVE', 'RLE', 'ROC', 'RPE', 'RPT', 'RTD', 'RTE', 'RUE', 'RUET', 'RUIS', 'RULT', 'RVE', 'SAS', 'SEN', 'SQ', 'STDE', 'TER', 'TOUR', 'TPL', 'TRA','TRAB', 'TRN', 'TRT', 'TSSE', 'TUN', 'VAL', 'VALL', 'VC', 'VCHE', 'VEN', 'VGE', 'VIA','VIAD', 'VIL', 'VLA', 'VOIE', 'VOIR', 'VOUT', 'VOY', 'VTE', 'ZA', 'ZAC', 'ZAD', 'ZI', 'ZONE', 'ZUP');
$replace = array('ANCIEN CHEMIN', 'AERODROME', 'AEROGARE', 'AGGLOMERATION', 'AIRE', 'ALLEE', 'ANGLE', 'ARCADE', 'ANCIENNE ROUTE', 'AUTOROUTE', 'AVENUE', 'BASE', 'BOULEVARD', 'BERGE', 'BORD', 'BARRIERE', 'BOURG', 'BRETELLE', 'BASSIN', 'CARRIERA', 'CALLE, CALLADA', 'CAMIN', 'CAMP', 'CANAL', 'CARREFOUR', 'CARRIERE', 'CASERNE', 'CHEMIN COMMUNAL', 'CHEMIN DEPARTEMENTAL', 'CHEMIN FORESTIER', 'CHASSE', 'CHEMIN', 'CHEMINEMENT', 'CHALET', 'CHAMP', 'CHAUSSEE', 'CHATEAU', 'CHEMIN VICINAL', 'CITE', 'COURSIVE','CLOS', 'COULOIR', 'COIN', 'COL', 'CORNICHE', 'CORON', 'COTE', 'COUR', 'CAMPING', 'CHEMIN RURAL', 'COURS', 'CROIX','CONTOUR', 'CENTRE', 'DARSE, DARCE', 'DEVIATION', 'DIGUE', 'DOMAINE', 'DRAILLE', 'DESCENTE', 'ECART', 'ECLUSE', 'EMBRANCHEMENT', 'EMPLACEMENT', 'ENCLOS', 'ENCLAVE', 'ESCALIER', 'ESPLANADE', 'ESPACE', 'ETANG', 'FOND', 'FAUBOURG','FONTAINE', 'FORET', 'FORT', 'FOSSE', 'FERME', 'GALERIE', 'GARE', 'GRAND BOULEVARD', 'GRANDE PLACE', 'GRANDE RUE', 'GREVE', 'HABITATION', 'HAMEAU', 'HIPPODROME', 'HALLE', 'HALAGE', 'HLM', 'HAUTEUR', 'ILE', 'ILOT', 'IMPASSE', 'JARDIN', 'JETEE', 'LAC', 'LEVEE', 'LICES','LIGNE', 'LOTISSEMENT', 'MAIL', 'MAISON', 'MARCHE', 'MARE', 'MAS', 'MORNE', 'MARINA', 'MONTEE', 'NOUVELLE ROUTE', 'PETITE AVENUE', 'PARC', 'PASSAGE', 'PASSE', 'PETIT CHEMIN', 'PORCHE', 'PHARE', 'PISTE', 'PARKING','PLACE', 'PLACA', 'PLAGE', 'PLAN', 'PLACIS', 'PASSERELLE', 'PLAINE', 'PLATEAU', 'POINTE', 'PONT', 'PORTIQUE', 'PORT', 'POSTE', 'POTERNE', 'PROMENADE', 'PETITE ROUTE', 'PARVIS', 'PETITE ALLEE', 'PORTE', 'PETITE RUE', 'PLACETTE', 'QUARTIER', 'QUAI', 'RACCOURCI', 'REMPART', 'RESIDENCE','RIVE', 'RUELLE', 'ROCADE', 'RAMPE', 'ROND-POINT', 'ROTONDE', 'ROUTE', 'RUE', 'RUETTE', 'RUISSEAU', 'RUELLETTE', 'RAVINE', 'SAS', 'SENTIER, SENTE', 'SQUARE', 'STADE', 'TERRE', 'TOUR', 'TERRE-PLEIN', 'TRAVERSE','TRABOULE', 'TERRAIN', 'TERTRE', 'TERRASSE', 'TUNNEL', 'VAL', 'VALLON, VALLEE', 'VOIE COMMUNALE', 'VIEUX CHEMIN', 'VENELLE', 'VILLAGE', 'VIA','VIADUC', 'VILLE', 'VILLA', 'VOIE', 'VOIRIE', 'VOUTE', 'VOYEUL', 'VIEILLE ROUTE', 'ZA', 'ZAC', 'ZAD', 'ZI', 'ZONE', 'ZUP');
$arr = array_combine($find, $replace);
$enreg = "Some PL here";
echo preg_replace_callback('/\b(?:'.implode("|", $find) . ')\b/', function($m) use ($arr) {
return $arr[$m[0]];
}, $enreg);
请参阅PHP demo。
'\b(?:'.implode("|", $find) . ')\b'
会产生类似\b(?:ACH|AER|AERG|PL|PLA|etc)\b
的模式,并且只会将替代字符作为整个单词匹配。
请注意,此解决方案假设缩写仅由字母(单词字符)组成,并且您的缩写列表不会太大而无法容纳单个正则表达式模式。否则,您可以使用更通用的模式,如'/\b[A-Z]+\b/'
,并且在回调函数中,您需要检查数组是否包含找到的键(例如,使用isset($arr[$m[0]]
)。
答案 1 :(得分:-1)
您可以使用密钥=> value数组来做到这一点。只需使用缩写作为键,将完整单词作为值。像这样:
foreach($resultstat as $enreg) {
$dictionary = [
'ACH' => 'ANCIEN CHEMIN',
'AER' => 'AERODROME'
// and so on
];
echo $dictionary[$enreg];
}