我是PHP的新手,试图从数据库中解析一行,并在其中获取一些neccesarray信息。
编辑:
我必须把作者姓名和姓氏作为第一个示例行: 预期的输出应该是:
Ayse Serap Karadag
Serap Gunes Bilgili
Omer Calka
Sevda Onder
Evren Burakgazi-Dalkilic
订单
[Karadag, Ayse Serap; Bilgili, Serap Gunes; Calka, Omer; Onder, Sevda] Yuzuncu Yil Univ, Sch Med, Dept Dermatol. %#[Burakgazi-Dalkilic, Evren] UMDNJ Cooper Univ Med Ctr, Piscataway, NJ USA.1
我从数据库中取这行。我必须采取一些作者姓名。
作者姓名用[]
写成。首先是用,
分隔的姓氏,如果有第二位作者则用;
分隔。
我必须在循环中执行此操作,因为我有近1000行这样的行。
我的代码是:
<?php
$con=mysqli_connect("localhost","root","","authors");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT Correspounding_Author FROM paper Limit 10 ");
while($row = mysqli_fetch_array($result))
{
echo "<br>";
echo $row['Correspounding_Author'] ;
echo "<br>";
// do sth here
}
mysqli_close($con);
?>
我正在寻找像explode()
substr
这样的方法,但正如我在开头提到的那样,我无法处理这个嵌套句子。
感谢任何帮助。
答案 0 :(得分:3)
while
循环中的代码应为:
preg_match_all("/\\[([^\\]]+)\\]/", $row['Correspounding_Author'], $matches);
foreach($matches[1] as $match){
$exp = explode(";", $match);
foreach($exp as $val){
print(implode(" ", array_map("trim", array_reverse(explode(",", $val))))."<br/>");
}
}
答案 1 :(得分:1)
以下内容应该有效:
$pattern = '~(?<=\[|\G;)([^,]+),([^;\]]+)~';
if (preg_match_all($pattern, $row['Correspounding_Author'], $matches, PREG_SET_ORDER)) {
print_r(array_map(function($match) {
return sprintf('%s %s', ltrim($match[2]), ltrim($match[1]));
}, $matches));
}
这是一个匹配以下项目的表达式:
[
或继续上一个匹配结束的位置后跟分号,另请参阅:PCRE Assertions。
Array
(
[0] => Ayse Serap Karadag
[1] => Serap Gunes Bilgili
[2] => Omer Calka
[3] => Sevda Onder
[4] => Evren Burakgazi-Dalkilic
)