php分解查找数组键

php分解查找数组键,php,mysql,preg-replace,explode,Php,Mysql,Preg Replace,Explode,我有一个使用pdo的mysql查询: SELECT DISTINCT CONCAT (nompropre, ' ', Auteur, ' de ', localite) AS auteur FROM Actes ORDER BY nompropre 它用于创建选择菜单。尝试分析从表单选择接收的输入: <option value=" abbé de Val-Saint-Lambert"> abbé de Val-Saint-Lambert</option> <opt

我有一个使用pdo的mysql查询:

SELECT DISTINCT CONCAT (nompropre, ' ', Auteur, ' de ', localite) AS auteur FROM Actes ORDER BY nompropre
它用于创建选择菜单。尝试分析从表单选择接收的输入:

<option value=" abbé de Val-Saint-Lambert"> abbé de Val-Saint-Lambert</option>
<option value=" abbé de Waulsort"> abbé de Waulsort</option>
<option value="Arnoul III comte de Looz et Chiny">Arnoul III comte de Looz et Chiny</option>
<option value="Arnoul III seigneur de Looz et Chiny">Arnoul III seigneur de Looz et Chiny</option>
<option value="Jean de Wasnes chevalier de ">Jean de Wasnes chevalier de </option>
<option value="Adam évêque de Morinie">Adam évêque de Morinie</option>
我需要做的是重建我首先连接的mysql字段,这样我就可以得到与上面示例中最后一个select对应的查询:

SELECT * FROM Actes, Bibliographie WHERE id = idBiblio AND nompropre = 'Adam' and Auteur = 'évêque' AND localite = 'Morinie';
为此,我可以分离一个字符串abbé| | | comte | | seigner,并将此autur用于mysql查询以获取结果

该字符串之前的所有内容都应成为nompropre

如果在该字符串之后存在de,则应删除并删除该单词

对于mysql查询,单词de-remove之后的所有内容都应该是本地化的


也许preg_match和preg_replace就可以了。

我不会说法语,所以我很难准确地知道您需要什么,但据我所知,您需要这样一个正则表达式:

$string = "Arnoul III comte de Looz et Chiny";
$pattern = "/^(.*)(abbé|comte|seigneur|seigneur|évêque|chevalier){1} de (.*)$/";
$nompropre = preg_replace($pattern, "$1", $string);
$auteur = preg_replace($pattern, "$2", $string);
$localite = preg_replace($pattern, "$3", $string);

我希望我已经理解了你的问题

我假设您希望在select中存储一些选项,这些选项是来自数据库的不同数据的组合,并让用户从中选择

我有很多建议-

1不用担心sql中的CONCAT,最好是在php中使用应用程序代码,而不是在数据库中

2为了让事情更简单,选项的值是不可见的,所以您可以在php中构建列和值的关联数组,在数组上调用json_encode,并将结果字符串作为值放入标记中。然后,当您想要获取数据时,您可以对json_进行解码并获取数组,这样就不必进行字符串解析

3如果可以重构数据库,那么只需在值中存储包含相关数据的数据库行的id


至少我不会尝试用字符串解析来解决这些问题。

您的数据库似乎设计得很糟糕。您应该使用唯一id将所有作者存储在一个单独的表中,并在Actes表中使用此id,并删除所有其他与作者相关的列。不确定,因为我还需要单独查询他们来自localite的位置以及他们的qualityévêque、abbé、seigneur、comte等。。。。。所以我会有我描述的问题,如果我把作者放在一个单独的表中……你描述的问题是一个错误的问题,我建议的设计是:1你不需要使用DISTINCT,你只需要获得作者表中唯一的所有记录。2连接不是mysql的工作,而是php的工作。一旦你把字段分开了,本地化。。。对于每个记录,您可以使用php轻松地将它们连接起来。我建议您看一看关于如何构建关系数据库的教程,这里有很多关于这方面的教程,例如:第一部分和第二部分。这会让你的生活变得更轻松。谢谢你的建议。
$string = "Arnoul III comte de Looz et Chiny";
$pattern = "/^(.*)(abbé|comte|seigneur|seigneur|évêque|chevalier){1} de (.*)$/";
$nompropre = preg_replace($pattern, "$1", $string);
$auteur = preg_replace($pattern, "$2", $string);
$localite = preg_replace($pattern, "$3", $string);