我有一系列相册$albums[]
和一系列照片$photos
。我想用所有匹配的照片回复每张专辑,并使用此代码:
<?php
...
foreach($albums as $album){
if( $album[photo_count] !== 0 ){
if($album[photo_count] > 10){
$limit = 10;
}
$boxID = $id = substr( $album[aid], strrpos( $album[aid], '_' )+1 );
?>
<div id="gal-<?=$boxID?>-box" class="box gallery-album">
<?
$i = 0;
foreach($photos as $photo){
if( ($photo[aid] == $album[aid]) && ($i < $limit) ){
echo '<img src="'.$photo[src_big].'" alt="'.$photo[caption].'"/>';
$i++;
}
}
?>
</div>
</div>
<?
}
}
这很好用,但感觉效率很低。有没有更好的编码方式?
答案 0 :(得分:2)
我不担心它是否高效,而是它是否清洁和可维护。
因此,我建议你将代码分成两个功能,一个用于查找与相册相关的所有照片,另一个用于创建用于显示相片的html,例如:类似的东西:
/**
* Gets the photos for a given album
* @param int $albumId the album identifier
* @return array an array of photos associated with this album,
* or an empty array if there are none
*/
function getPhotos($albumId);
/**
* Outputs an html div for each photo in the photo array
* @param array $photos an array of photos
*/
function displayPhotos($photos);
您还可以使用一些SPL迭代器来使代码更清晰,例如LimitIterator
,您可以使用它来限制传递给给定相册的displayPhotos的数组。
答案 1 :(得分:0)
嗯,这是阵列结构的问题。我认为你不能以更好的方式实现这一目标。在 $ albums 数组中的每个相册元素中包含照片元素会很不错,但您必须预先解析它,这将是无用的。