好的,这是我的困境:
我已经阅读了有多少人希望能够使用PHPFlickr显示来自Flickr的一组图像,但是对于PhotoSets的API如何不放置单独的照片描述感到遗憾。有些人试图设置他们的PHP,因此当脚本组装页面上的图库时,它将拉出每张照片的描述。但是,该方法显示了它的缓慢和低效。
我在其他地方发现了一个想法,即用照片ID和描述创建一串逗号分隔值。我将它存储在MySQL数据库中,然后在我的脚本在页面上组装库时调用它。我将使用explode来创建照片ID及其描述的数组,然后调用它来填补空白......从而减少API调用和更快的页面。
所以在后端管理员中,我有一个表单,我在其中设置了图库的信息,并提交了一个Set ID。然后脚本将通过并生成此字符串的分隔值(“|〜|”作为分隔)。这就是我想出的:
include("phpFlickr.php");
$f = new phpFlickr("< api >");
$descArray = "";
// This will create an Array of Photo ID from the Set ID.
// $setFeed is the set ID brought in from the form.
$photos = $f->photosets_getPhotos($setFeed);
foreach ($photos['photoset']['photo'] as $photo) {
$returnDesc = array();
$photoID = $photo['id'];
$rsp = $f->photos_getInfo($photoID);
foreach ($rsp as $pic) {
$returnDesc[] = htmlspecialchars($pic['description'], ENT_QUOTES);
}
$descArray .= $photoID."|~|".$returnDesc[0]."|~|";
}
然后将字符串$ descArray放在MySQL字符串中,该字符串将其放入数据库中,并从表单中输入其他信息。
我的第一个问题是我是否正确使用第二个foreach循环来获取这些描述?我试着通过网络上没有使用它的其他例子,但他们从未工作过。当我带来第二个foreach,然后它工作。我应该做些别的吗?
我注意到返回的数据是两个条目。一个是描述,另一个只是一个“o”...因此数组$ returnDesc所以我可以得到我想要的一个字符串而不是另一个。
第二个问题是我是否过于复杂。我喜欢尝试学习更清洁/更精简的代码,并且正在寻找意见。
欢迎提出改进建议。提前谢谢。
答案 0 :(得分:0)
我不是100%肯定,因为我刚刚浏览了phpFlickr的来源,并查看了getInfo()
来自print_r($rsp);
的{{1}}来电。但是,无论如何,让我去吧:)。
首先,看起来你不应该像你提到的那样需要那个循环。 $rsp
的输出是什么样的?可能$pic = $rsp[0]; $desc = $pic['description'];
是一个包含1个元素的数组,在这种情况下,您可以抛弃内部循环并将其替换为类似htmlspecialchars
另外,我会在您的数据库表中创建一个新的“description”列(将照片ID作为主键),并将描述存储在它们自己的位置。像这样解析数据库字段有点像噩梦。最后,您可能希望强制getDescription
在UTF8模式下工作,因为我认为默认情况下不会这样做。从内存中,第三个参数是内容编码。
编辑: phpFlickr有没有自己的缓存系统?为什么不使用它并使缓存大小?好像你可能在这里重新发明轮子......也许你需要做的就是增加缓存大小,并制作一个function getDescription ($id)
{
$rsp = $phpFlickr->photos_getInfo ($id);
$pic = $rsp[0];
return $pic['description'];
}
函数:
{{1}}