在 API 响应中将 URL 分组为单个对象输出
Group URLs into single object output in API response
所以我会尽可能地解释这一点,但我对如何呈现 link 有一些问题,所以我将在下面详细介绍。
这里是完整的方法:
public function link_urls($text)
{
if (!$urls = $this->get('entities', 'urls')) {
return $text;
}
foreach ($urls as $url) {
$text = str_replace(
$url->url,
'<a href="' . $url->url . '" target="_blank">' . $url->display_url . '</a>',
$text
);
}
return $text;
}
此方法的作用是从 API 获取 ['text']
参数响应,然后搜索 URL 并附加 HTML 输出。
假设我们有 $text
输出以下推文数据:
string(316) “As we continue to celebrate #BlackHistoryMonth , our next Black Artist Spotlight is local painter @EbonyLewisArt https:// t.co/LaRa7GDk4i”
这条特定的推文有 4 张图片,但 Twitter 将它们全部分组为一个“推文”link,如上所示。
接下来,我正在检查它 returns 的推文 $urls
对象,它是 $urls = $this->get('entities', 'urls')
这给了我:
object(stdClass)#1958 (5) {
["start"]=>
int(115)
["end"]=>
int(138)
["url"]=>
string(23) "https:// t.co/LaRa7GDk4i"
["expanded_url"]=>
string(65) "https://twitter.com/dallasmavs/status/1491079415375495168/photo/1"
["display_url"]=>
string(26) "pic.twitter.com/LaRa7GDk4i"
}
object(stdClass)#1737 (5) {
["start"]=>
int(115)
["end"]=>
int(138)
["url"]=>
string(23) "https:// t.co/LaRa7GDk4i"
["expanded_url"]=>
string(65) "https://twitter.com/dallasmavs/status/1491079415375495168/photo/1"
["display_url"]=>
string(26) "pic.twitter.com/LaRa7GDk4i"
}
object(stdClass)#1735 (5) {
["start"]=>
int(115)
["end"]=>
int(138)
["url"]=>
string(23) "https:// t.co/LaRa7GDk4i"
["expanded_url"]=>
string(65) "https://twitter.com/dallasmavs/status/1491079415375495168/photo/1"
["display_url"]=>
string(26) "pic.twitter.com/LaRa7GDk4i"
}
object(stdClass)#1736 (5) {
["start"]=>
int(115)
["end"]=>
int(138)
["url"]=>
string(23) "https:// t.co/LaRa7GDk4i"
["expanded_url"]=>
string(65) "https://twitter.com/dallasmavs/status/1491079415375495168/photo/1"
["display_url"]=>
string(26) "pic.twitter.com/LaRa7GDk4i"
}
问题来了:
我正在调用一个 foreach 循环,该循环获取所有 URL 并使用 <a>
标记转换 $url->url
并显示 $url->display_url
,如下所示:
foreach ($urls as $url) {
$text = str_replace(
$url->url,
'<a href="' . $url->url . '" target="_blank">' . $url->display_url . '</a>',
$text
);
}
问题是 $text
只有一个 URL 要查看并且 foreach 循环 4 次导致问题并输出以下内容:
As we continue to celebrate #BlackHistoryMonth , our next Black Artist
Spotlight is local painter @EbonyLewisArt
pic.twitter.com/LaRa7GDk4i”
target=”_blank”>pic.twitter.com/LaRa7GDk4i”
target=”_blank”>pic.twitter.com/LaRa7GDk4i”
target=”_blank”>pic.twitter.com/LaRa7GDk4i
当我在 $text
中有一个 $urls
对象和一个 link 时,它完全没问题,当 Twitter 将 link 分组在 [=16] 中时,问题就出现了=] 并输出多个对象。
这是我的问题:
如果有多个完全相同的对象,是否可以删除其他对象只输出一个?
在 foreach 中,如果对象相同,我可以以某种方式跳过所有对象吗?
感谢所有帮助!
请将您的 foreach
循环更改为此
foreach ($urls as $url) {
if( strpos($text, $url->url) !== false ){
$text = str_replace(
$url->url,
'<a href="' . str_replace(' ', '', $url->url) . '" target="_blank">' . $url->display_url . '</a>',
$text
);
break;
}
}
所以我会尽可能地解释这一点,但我对如何呈现 link 有一些问题,所以我将在下面详细介绍。
这里是完整的方法:
public function link_urls($text)
{
if (!$urls = $this->get('entities', 'urls')) {
return $text;
}
foreach ($urls as $url) {
$text = str_replace(
$url->url,
'<a href="' . $url->url . '" target="_blank">' . $url->display_url . '</a>',
$text
);
}
return $text;
}
此方法的作用是从 API 获取 ['text']
参数响应,然后搜索 URL 并附加 HTML 输出。
假设我们有 $text
输出以下推文数据:
string(316) “As we continue to celebrate #BlackHistoryMonth , our next Black Artist Spotlight is local painter @EbonyLewisArt https:// t.co/LaRa7GDk4i”
这条特定的推文有 4 张图片,但 Twitter 将它们全部分组为一个“推文”link,如上所示。
接下来,我正在检查它 returns 的推文 $urls
对象,它是 $urls = $this->get('entities', 'urls')
这给了我:
object(stdClass)#1958 (5) {
["start"]=>
int(115)
["end"]=>
int(138)
["url"]=>
string(23) "https:// t.co/LaRa7GDk4i"
["expanded_url"]=>
string(65) "https://twitter.com/dallasmavs/status/1491079415375495168/photo/1"
["display_url"]=>
string(26) "pic.twitter.com/LaRa7GDk4i"
}
object(stdClass)#1737 (5) {
["start"]=>
int(115)
["end"]=>
int(138)
["url"]=>
string(23) "https:// t.co/LaRa7GDk4i"
["expanded_url"]=>
string(65) "https://twitter.com/dallasmavs/status/1491079415375495168/photo/1"
["display_url"]=>
string(26) "pic.twitter.com/LaRa7GDk4i"
}
object(stdClass)#1735 (5) {
["start"]=>
int(115)
["end"]=>
int(138)
["url"]=>
string(23) "https:// t.co/LaRa7GDk4i"
["expanded_url"]=>
string(65) "https://twitter.com/dallasmavs/status/1491079415375495168/photo/1"
["display_url"]=>
string(26) "pic.twitter.com/LaRa7GDk4i"
}
object(stdClass)#1736 (5) {
["start"]=>
int(115)
["end"]=>
int(138)
["url"]=>
string(23) "https:// t.co/LaRa7GDk4i"
["expanded_url"]=>
string(65) "https://twitter.com/dallasmavs/status/1491079415375495168/photo/1"
["display_url"]=>
string(26) "pic.twitter.com/LaRa7GDk4i"
}
问题来了:
我正在调用一个 foreach 循环,该循环获取所有 URL 并使用 <a>
标记转换 $url->url
并显示 $url->display_url
,如下所示:
foreach ($urls as $url) {
$text = str_replace(
$url->url,
'<a href="' . $url->url . '" target="_blank">' . $url->display_url . '</a>',
$text
);
}
问题是 $text
只有一个 URL 要查看并且 foreach 循环 4 次导致问题并输出以下内容:
As we continue to celebrate #BlackHistoryMonth , our next Black Artist Spotlight is local painter @EbonyLewisArt pic.twitter.com/LaRa7GDk4i” target=”_blank”>pic.twitter.com/LaRa7GDk4i” target=”_blank”>pic.twitter.com/LaRa7GDk4i” target=”_blank”>pic.twitter.com/LaRa7GDk4i
当我在 $text
中有一个 $urls
对象和一个 link 时,它完全没问题,当 Twitter 将 link 分组在 [=16] 中时,问题就出现了=] 并输出多个对象。
这是我的问题:
如果有多个完全相同的对象,是否可以删除其他对象只输出一个?
在 foreach 中,如果对象相同,我可以以某种方式跳过所有对象吗?
感谢所有帮助!
请将您的 foreach
循环更改为此
foreach ($urls as $url) {
if( strpos($text, $url->url) !== false ){
$text = str_replace(
$url->url,
'<a href="' . str_replace(' ', '', $url->url) . '" target="_blank">' . $url->display_url . '</a>',
$text
);
break;
}
}