[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Слияние результата цикла
Cheizer
Помогите разобраться пожалуйста, есть массив $o['pages'], наполняется classom из таблицы, где есть поле "type", в этом поле просто определяется тип меню, левое "left" или верхнее "top", вывожу верхнее меню, все окей,

но вот задача, на последний пункт меню, поставить css class="last", никак не могу посчитать правильно, весь извелся, завожу счетчик перед циклом, и сравниваю его значения с количеством страниц в базе, но там общее количество, и top и left , и поэтому не получается, а мне нужно только записей с типом top узнать, и поставить стиль на последний элемент, задача вроде простая, только вот я начинающий, крышу рвет, подскажите люди как реализовать это?
<? if(!empty($o['pages'])): ?>
<ul>
<?$q=0;?>
<?
foreach($o['pages'] as $page): ?>

<?
if($page['type'] == 'top'):?>

<?
$q++;?>

<li <? if(count($o['pages']) == $q): ?>last<? endif; ?>">
<a href="
/<?=$page['alias']?>"><?=$page['name']?></a>
</li>

<? endforeach; ?>
</ul>
<? endif; ?>




Спустя 3 минуты, 35 секунд (19.11.2010 - 01:41) Cheizer написал(а):
извините, для примера неправильно написал строку исправляюсь:
<li <? if(count($o['pages']) == $q): ?>class="last"<? endif; ?>>

Спустя 4 минуты, 19 секунд (19.11.2010 - 01:45) inpost написал(а):
array(0,1,2,3)
count = 4. надо указывать (count-1).

Спустя 5 минут, 34 секунды (19.11.2010 - 01:51) Cheizer написал(а):
Прошу прощения, немного не понятно, как это реализовать в моем случае?

Спустя 7 минут, 35 секунд (19.11.2010 - 01:58) inpost написал(а):
Давай так, что значит эта строчка:
<? if(count($o['pages']) == $q): ?> И какую роль тут принимает count, и какую роль $q? Подсказываю: последнее прохождение: if(4 == 3), а должно быть одинаково! Причину рассписал сверху.

Спустя 7 минут, 14 секунд (19.11.2010 - 02:05) Cheizer написал(а):
в массиве $o['pages'] находится 11 пунктов меню, 7 из которых для верхнего меню с типом top (как раз то с которым работаю), и 4 для левого меню с типом left, я выбираю только top сейчас, цикл проходит 7 раз и счетчик $q насчитывает 7, да и сравнивая в конце получается что count($o['pages']) = 11, а счетчик $q= 7, и результат не совпадает, если я вычту 1 из count($o['pages']) , то ничего не изменится же, или я совсем не понял вас sad.gif

Спустя 1 минута, 5 секунд (19.11.2010 - 02:06) Cheizer написал(а):
как правильно написать проверку? Думаю в этом соль

Спустя 1 час, 37 минут, 58 секунд (19.11.2010 - 03:44) job-nik написал(а):
соль в правильном построении массива и последующем правильном его разборе. в твоём коде логика хромает. попробуй так:
<?php
/*
$o['pages'][0]['name'] = "name0";
$o['pages'][0]['type'] = "top";
$o['pages'][0]['link'] = "link0";

$o['pages'][1]['name'] = "name1";
$o['pages'][1]['type'] = "left";
$o['pages'][1]['link'] = "link1";

$o['pages'][2]['name'] = "name2";
$o['pages'][2]['type'] = "top";
$o['pages'][2]['link'] = "link2";

$o['pages'][3]['name'] = "name3";
$o['pages'][3]['type'] = "top";
$o['pages'][3]['link'] = "link3";

$o['pages'][4]['name'] = "name4";
$o['pages'][4]['type'] = "left";
$o['pages'][4]['link'] = "link4";

$o['pages'][5]['name'] = "name5";
$o['pages'][5]['type'] = "top";
$o['pages'][5]['link'] = "link5";
*/


if(!empty($o['pages']))
{
echo "<textarea cols=\"50\" rows=\"6\">". build_menu($o, "top") ."</textarea>";
//echo build_menu($o, "top");
}
// строим лист из массива
function build_menu(&$arr, $side)
{
$c = count($arr['pages']); // количество записей
$l = $c - 1; // последняя запись
for($i=0; $i<$c; $i++)
{
if($arr['pages'][$i]['type'] == $side)
{
if($i == $l) $class = " class=\"last\" ";
else $class = " class=\"regular\" ";

$str.= "\n<li". $class ."><a href=\"". $arr['pages'][$i]['link'] ."\">". $arr['pages'][$i]['name'] ."</a></li>";
}
}

return "<ul>". $str ."\n</ul>";
}
?>

Спустя 7 часов, 43 минуты, 16 секунд (19.11.2010 - 11:28) Cheizer написал(а):
уф, Спасибо большое, этого достаточно что бы я понял smile.gif), теперь понятно, и все получилось, задача то банальная, у верхнего горизонтального меню после каждого пункта, есть перегородка, правый бордер у <li>, а вот у первого его само собой нет, а у последнего он не нужен, вот ради красоты все и происходит smile.gif Спасибо inpost и job-nik!!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.