当我从数据库中获取数据之后,我正在研究从变量$message
获取href网址的代码。使用preg_match_all
从变量获取href标签时遇到问题,因为它将在输出中两次显示数组。
以下是输出:
Array ( [0] => Array ( [0] => https://example.com/s-6?sub=myuserid [1] => https://example.com/s-6?sub=myuserid
[2] => https://example.com/s-6?sub=myuserid [3] => https://www.example2.com/1340253724 [4] => https://example.com/s-6?sub=myuserid ) )
应该是:
Array ( [0] => https://example.com/s-6?sub=myuserid [1] => https://example.com/s-6?sub=myuserid
[2] => https://example.com/s-6?sub=myuserid [3] => https://www.example2.com/1340253724 [4] => https://example.com/s-6?sub=myuserid ) )
这是一个最小的示例:
<?php
$message = '<a href="https://example.com/s-6?sub=myuserid">Click Here!</a>
<a href="https://example.com/s-6?sub=myuserid">Watch The Video Here!</a>
<a href="https://example.com/s-6?sub=myuserid">HERE</a>
<a href="https://www.example2.com/1340253724">Example2.com/1340253724</a>
<a href="https://example.com/s-6?sub=myuserid">Here</a>';
//find the href urls from the variable
$regex = '/https?\:\/\/[^\" ]+/i';
preg_match_all($regex, $message, $matches);
print_r(matches);
?>
我尝试使用这种不同的方式:
foreach($matches as $url)
{
echo $url;
}
我也尝试过这个:
foreach($matches as $url)
{
$urls_array[] = $url;
}
print_r($urls_array);
结果仍然相同。我试图在Google上找到答案,但是找不到解决方案的答案。
不幸的是,我无法找到解决方案,因为我不知道如何使用preg_match_all
来获取href标签以显示元素并存储在数组中。
我发现的问题与名为$matches
的变量有关。
能否请您举一个示例,说明如何使用preg_match_all
来获取href标签,以便可以将元素存储在数组中?
谢谢。
答案 0 :(得分:1)
尝试一下:
foreach($matches[0] as $url)
{
echo $url;
}
答案 1 :(得分:1)
据我正确理解,您的问题是您收到了一对多嵌套的结果数组,而您无法读取也作为数组的URL?
您可以使用的解决方案之一是摆脱不必要的嵌套数组。您可以使用PHP Array函数use std::cell::RefCell;
use std::rc::Rc;
let sink_infos: Rc<RefCell<Vec<StreamInfo>>> = Rc::new(RefCell::new(Vec::new()));
let sink_infos2 = sink_infos.clone(); // Create a new Rc which points to the same data.
let op = introspector.get_sink_input_info_list(move |result| match result {
pulse::callbacks::ListResult::Item(info) => sink_infos2.borrow_mut().push(info.into()),
pulse::callbacks::ListResult::End => {},
pulse::callbacks::ListResult::Error => panic!("Error getting sink input info"),
});
来完成此操作。
array_shift()将数组的第一个值移开并返回[...]
因此,诀窍在于,返回值将是您的数组,其中包含可以循环的数据。
有关您的案例的一些示例:
array_shift()
当然,您可以不同地使用array_shift(),那只是一个简单的示例;)
答案 2 :(得分:1)
$ out [0]包含与完整模式匹配的字符串数组,并且 $ out [1]包含由标签括起来的字符串数组。
所以您可以喜欢
foreach($matches[0] as $url)
{
echo $url;
}