php 分解查找数组键

php explode find array key

我有这个 mysql 查询(使用 pdo):

SELECT DISTINCT CONCAT (nompropre, ' ', Auteur, ' de ', localite) AS auteur FROM Actes ORDER BY nompropre

用于创建select菜单。尝试分析从表单收到的输入 (select) :

<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>

然后我这样做:

$parts =  explode(' ', $_GET['nompropre']);

我需要做的是重建我第一次连接的 mysql 字段,这样我就可以结束这样的查询(对应于上面示例中的最后一个 select):

SELECT * FROM Actes, Bibliographie WHERE id = idBiblio AND nompropre = 'Adam' and Auteur = 'évêque' AND localite = 'Morinie';

为此,我可以分离一个字符串 (abbé || comte || seigneur) 并创建此 Auteur(用于 mysql 查询获取结果的目的)

该字符串之前的所有内容都应变为正常

单词 "de" 如果存在于该字符串之后,则应将其删除,并且

单词 "de" 之后的所有内容(已删除)都应成为 mysql 查询的本地化。

也许 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, "", $string);
$auteur = preg_replace($pattern, "", $string);
$localite = preg_replace($pattern, "", $string);

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

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

我有很多建议 -

1) 不要在 sql 中使用 CONCAT,最好在 php 而不是在数据库中使用应用程序代码。

2) 让事情变得更简单,选项的值是不可见的,所以也许你可以在 php 中构建一个列和值的关联数组,在数组上调用 json_encode,并将结果字符串作为标签中的值。然后你可以 json_decode 并在你想取出数据时取回你的数组,这样你就不必进行字符串解析。

3) 如果您可以重构您的数据库,那么您需要在值中存储的只是具有相关数据的数据库行的 ID。

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