gpt4 book ai didi

PHP - 从一行中提取两个值

转载 作者:行者123 更新时间:2023-12-02 10:14:44 25 4
gpt4 key购买 nike

我是正则表达式的初学者,正在使用无法安装任何东西的服务器(使用 DOM 方法是否需要安装任何东西?)。

我有一个问题,以我目前的知识无法解决。我想从相册 id 和图像 url 下面的行中提取。字符串(文件)中有更多行和其他 url 元素,但我需要的相册 ID 和图像 url 都在类似于以下字符串的字符串中:

<a href="http://www.mydomain.com/galeria/thumbnails.php?album=774" target="_blank"><img alt="/" src="http://img255.imageshack.us/img00/000/000001.png" height="133" width="113"></a>

所以在这种情况下我想得到“774”和“http://img255.imageshack.us/img00/000/000001.png”

我见过多个仅从字符串中提取 url 或另一个元素的示例,但我确实需要将它们放在一起并将它们存储在数据库的一条记录中。

非常感谢任何帮助!

最佳答案

由于您是新手,我将向您解释您可以使用 PHP 的 HTML 解析器 DOMDocument 提取你需要的东西。您不应该不要使用正则表达式,因为它们在解析 HTML 时本质上容易出错,并且很容易导致许多误报。

首先,假设您有 HTML:

$html = '<a href="http://www.mydomain.com/galeria/thumbnails.php?album=774" target="_blank"><img alt="/" src="http://img255.imageshack.us/img00/000/000001.png" height="133" width="113"></a>';

现在,我们将其加载到 DOMDocument 中:

$doc = new DOMDocument;
$doc->loadHTML( $html);

现在,我们已经加载了 HTML,是时候找到我们需要的元素了。假设您可以遇到其他 <a>文档中的标签,因此我们想要找到那些 <a>具有直接 <img> 的标签标记为 child 。然后,检查以确保我们拥有正确的节点,我们需要确保提取正确的信息。那么,让我们开始吧:

$results = array();

// Loop over all of the <a> tags in the document
foreach( $doc->getElementsByTagName( 'a') as $a) {
// If there are no children, continue on
if( !$a->hasChildNodes()) continue;

// Find the child <img> tag, if it exists
foreach( $a->childNodes as $child) {
if( $child->nodeType == XML_ELEMENT_NODE && $child->tagName == 'img') {
// Now we have the <a> tag in $a and the <img> tag in $child
// Get the information we need:
parse_str( parse_url( $a->getAttribute('href'), PHP_URL_QUERY), $a_params);
$results[] = array( $a_params['album'], $child->getAttribute('src'));
}
}
}

一个print_r( $results);现在leaves us with :

Array
(
[0] => Array
(
[0] => 774
[1] => http://img255.imageshack.us/img00/000/000001.png
)

)

请注意,这省略了基本的错误检查。您可以添加的一件事是在内部 foreach循环,您可以检查以确保成功解析 album来自 <a> 的参数的href属性,如下所示:

if( isset( $a_params['album'])) {
$results[] = array( $a_params['album'], $child->getAttribute('src'));
}

我在此使用的每个函数都可以在 PHP documentation 中找到.

关于PHP - 从一行中提取两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13462931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com