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。
至少我不会尝试用字符串解析来解决这些问题。
我有这个 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。
至少我不会尝试用字符串解析来解决这些问题。