从 preg_match_all 获取多个值并使用 foreach
Get multiple values from preg_match_all and use of foreach
我已尝试为我的特定问题找到解决方案。我有一个正则表达式,可以在其中找到两个特定值。这些值需要在 foreach 循环中组合。
字符串
$artikel = "This is some random text. I want to show you this image: [img alt=alt text for this image]the-image.gif[/img]";
所以我将这个正则表达式与 preg_match_all
一起使用来获取替代文本和图像本身:
preg_match_all('/\[img alt=(.*?)\](.+?)\[\/img\]/i', $artikel, $matches);
我可以使用 print_r($matches[1]);
和 print_r($matches[2]);
单独获取结果
问题是我真的不知道如何进行组合的 foreach 循环。我想将图像连同相关的替代文本插入到我的数据库中。
像这样:
foreach ($matches as $match){
//example code
$stmt = $conn->prepare("INSERT INTO images (img_file, img_alt_text) VALUES (?, ?)");
$stmt->bind_param("ss", $img_file, $img_alt_text);
$img_alt_text = $match[1];
$img_file = $match[2];
$stmt->execute();
}
如果您更改返回匹配项的顺序,就可以做到这一点。使用 PREG_SET_ORDER
,您将以更容易迭代的格式获得它们。
preg_match_all('/\[img alt=(.*?)\](.+?)\[\/img\]/i', $artikel, $matches, PREG_SET_ORDER);
foreach ($matches as $match){
//example code
$stmt = $conn->prepare("INSERT INTO images (img_file, img_alt_text) VALUES (?, ?)");
$stmt->bind_param("ss", $img_file, $img_alt_text);
$img_alt_text = $match[1];
$img_file = $match[2];
$stmt->execute();
}
我认为每个图像不会总是有一个 alt(如果有 - 只需迭代每一对(比如循环内的索引 % 2 条件)。
我建议您分两个阶段处理 $article
字符串:
- 查找所有图像(比如括号中的整个图案)
- 然后:遍历结果并找到与您的确切模式匹配的子匹配项。
我已尝试为我的特定问题找到解决方案。我有一个正则表达式,可以在其中找到两个特定值。这些值需要在 foreach 循环中组合。
字符串
$artikel = "This is some random text. I want to show you this image: [img alt=alt text for this image]the-image.gif[/img]";
所以我将这个正则表达式与 preg_match_all
一起使用来获取替代文本和图像本身:
preg_match_all('/\[img alt=(.*?)\](.+?)\[\/img\]/i', $artikel, $matches);
我可以使用 print_r($matches[1]);
和 print_r($matches[2]);
问题是我真的不知道如何进行组合的 foreach 循环。我想将图像连同相关的替代文本插入到我的数据库中。
像这样:
foreach ($matches as $match){
//example code
$stmt = $conn->prepare("INSERT INTO images (img_file, img_alt_text) VALUES (?, ?)");
$stmt->bind_param("ss", $img_file, $img_alt_text);
$img_alt_text = $match[1];
$img_file = $match[2];
$stmt->execute();
}
如果您更改返回匹配项的顺序,就可以做到这一点。使用 PREG_SET_ORDER
,您将以更容易迭代的格式获得它们。
preg_match_all('/\[img alt=(.*?)\](.+?)\[\/img\]/i', $artikel, $matches, PREG_SET_ORDER);
foreach ($matches as $match){
//example code
$stmt = $conn->prepare("INSERT INTO images (img_file, img_alt_text) VALUES (?, ?)");
$stmt->bind_param("ss", $img_file, $img_alt_text);
$img_alt_text = $match[1];
$img_file = $match[2];
$stmt->execute();
}
我认为每个图像不会总是有一个 alt(如果有 - 只需迭代每一对(比如循环内的索引 % 2 条件)。
我建议您分两个阶段处理 $article
字符串:
- 查找所有图像(比如括号中的整个图案)
- 然后:遍历结果并找到与您的确切模式匹配的子匹配项。