2013-11-24 2 views
0

У меня есть 12 ссылок на изображения в db, которые я могу вызвать с помощью get_field ('opt3_img_N'), где N может быть любым числом от 1 -12. (Я использую Wordpress для всех знакомых).Более эффективный алгоритм в PHP

У меня возникли проблемы с тем, чтобы создать эффективный способ вывода изображений так, как я хочу.

Мне нужны ссылки, которые будут распределены в 3 divs одинаково. В идеале я хотел, чтобы изображение 1 находилось в div 1, изображение 2 в div 2, изображение 3 в div 3, изображение 4 в div 1 и т. Д.

Но, я не могу на всю жизнь понять, , Я знаю, что это, вероятно, было сделано многими способами, но я не мог найти ничего в сети.

То, что я прямо сейчас:

<div class="div-1"> 
<?php for($i = 1; $i <= 4; $i++) { 
    $img = get_field("opt3_img_$i") ?: get_template_directory_uri() . "/images/default.jpg"; 
    $url = get_field("opt3_url_$i") ?: "#"; ?> 
    <a href="<?php echo $url ?>"><img src="<?php echo $img ?>" /></a> 
<?php endfor ?> 
</div> 

и так далее с дивы 2 и 3. По существу, это своего рода грубой силы способ сделать это. Это делается на данный момент, но я хотел бы знать, есть ли лучший способ сделать это.

PS. Я не уверен, что это хороший вопрос, чтобы спросить здесь, поэтому, пожалуйста, проголосуйте, если хотите.

спасибо.

ответ

1

Там находятся несколько способов построения HTML. Thisn один строит блоки DIV перед печатью ...

$myDivs = array(); 
$divNo = 4; // set to the number of div blocks you want to split between 
$imgCount = 12; // set to number of images. 

for($i = 1; $i <= $imgCount; $i++) { 
    $img = get_field("opt3_img_$i") ?: get_template_directory_uri() . "/images/default.jpg"; 
    $url = get_field("opt3_url_$i") ?: "#"; 
    // use modulo operator to decide which div to print in.... 
    $idx = ($i - 1) % ($divNo-1); 
    // I like heredocs... 
    $myDivs[ $idx][] = <<<EOF 
<a href="$url"><img src="{$img}" /></a> 
EOF; 
} 
// print the divs one after the other.... 
$j = 1; 
foreach ($myDivs as $div) { 
    $text = join("\n", $div); 
    echo "<div class='div-{$j}'>{$text}</div>\n"; 
    $j++; 
} 
+0

Я построил его, как это на первый, но обнаружил, что мой текущий решение более читаемо. Я надеялся на что-то более короткое, я полагаю. Я отмечу это как ответ, хотя, поскольку он делает именно то, что мне нужно. – clueless

+0

Спасибо :-) но решение, которое у вас есть в вашем вопросе, не разбивает изображения по вашему запросу - оно должно помещать 1, 4, 7, 10 в div 1, тогда как ваш просто ставит 1,2,3,4 – vogomatix

0

Есть много способов сделать это, я не уверен, что вы подразумеваете под грубой силой, но это не грубая сила, это всего лишь петля.

Вы находитесь на правильном пути с петлей здесь, что вам нужно, чтобы начать думать о том, что это курсор.

//PSEUDO CODE 
$div_pointer = 1; 
for($i = 0; $i < 12; $i++) { 
    <div class=$div_pointer> 
    $div_pointer++; 
    if($div_pointer > 3) $div_pointer = 1; 
} 

Это в основном псевдо пример использования переменной для отслеживания которых Div вы хотите записать образ. Переменная $i выполняет итерирование по основному набору данных, в то время как курсор отслеживает, из какого из трех разделов для записи. Как только он доберется до четвертого fiv, он сбрасывается обратно. Можете помочь как новый способ взглянуть на проблему.

Это сказанное есть намного лучшие способы получения изображений в дивы: P

0

Вы можете сделать это один раз:

<?php 
    $dir=get_template_directory_uri(); // Get template dir 
    for($i=1;$i < 4;++$i){ 
    echo '<div class="div-'.$i.'">'; 
    $img = get_field("opt3_img_$i") ? : $dir . "/images/default.jpg"; 
    $url = get_field("opt3_url_$i") ? : "#"; 
    echo '<a href="'.$url.'"><img src="'.$img.'" /></a>'; 
    echo'</div>'; 
    } 
?> 

Днем кодирования

Смежные вопросы