Есть форыч PHP: foreach( $pages as $k => $page ){ $pages_name = $page->post_title; $pages_href = $page->guid; $first_letter = get_first_letter( $page->post_title ); $prev_firstLetter = isset( $pages[ ($k-1) ] ) ? get_first_letter( $pages[ ($k-1) ]->post_title ) : ''; ?> <div class="inside-list"> <?php if( $prev_firstLetter !== $first_letter ){ ?> <div class="heading"><h3><?php echo $first_letter; ?></h3><span id="<?php echo $first_letter; ?>"></span></div> <?php } ?> <div class="list-link"><a href="<?php echo $pages_href; ?>"><?php echo $pages_name; ?></a></div> </div> <?php } ?> Сейчас он выводит значения с бд и добавляет алфавитный указатель. Выглядит это так HTML: <div class="inside"> <div class="inside-list"> <div class="heading"><h3>П</h3><span id="П"></span></div> <div class="list-link"><a href="?page_id=40">Пример страницы1</a></div> </div> <div class="inside-list"> <div class="list-link"><a href="?page_id=2">Пример страницы2</a></div> </div> <div class="inside-list"> <div class="heading"><h3>С</h3><span id="С"></span></div> <div class="list-link"><a href="?page_id=27">Страница 2</a></div> </div> <div class="inside-list"> <div class="list-link"><a href="?page_id=29">Страница 3</a></div> </div> <div class="inside-list"> <div class="list-link"><a href="?page_id=31">Страница 4</a></div> </div> </div> Вопрос, как код html превратить в следующий HTML: <div class="inside"> <div class="inside-list"> <div class="heading"><h3>П</h3><span id="П"></span></div> <div class="list-link"><a href="?page_id=40">Пример страницы1</a></div> <div class="list-link"><a href="?page_id=2">Пример страницы3</a></div> <div class="list-link"><a href="?page_id=2">Пример страницы4</a></div> <div class="list-link"><a href="?page_id=2">Пример страницы5</a></div> <div class="list-link"><a href="?page_id=2">Пример страницы6</a></div> <div class="inside-list"> <div class="heading"><h3>С</h3><span id="С"></span></div> <div class="list-link"><a href="?page_id=27">Страница 2</a></div> <div class="list-link"><a href="?page_id=29">Страница 3</a></div> <div class="list-link"><a href="?page_id=31">Страница 4</a></div> <div class="list-link"><a href="?page_id=31">Страница 5</a></div> <div class="list-link"><a href="?page_id=31">Страница 6</a></div> </div> </div> В дальнейшем я хочу повесить деление на 3-4 колонки для блоков.
PHP: $pages_prepare = array();foreach( $pages as $k => $page ){ $first_letter = get_first_letter( $page->post_title ); $pages_prepare[$first_letter][] = $page;} В результате получишь массив, где ключи - это буквы, а значения - массив страниц на эту букву. А его уже легко превратить в то, что тебе нужно.
Я так понял, приедется еще один форыч внутри этого делать Т.к. сейчас выдает <b>Warning</b>: Illegal string offset 'B' <div class="list-link"><a href="<?php echo $pages_href[$first_letter]; ?>"><?php echo $pages_name[$first_letter]; ?></a></div> Это я попробовал по ключу обратися
Да. Что-то типа: PHP: foreach($pages_prepare as $first_letter => $pages){ echo "<div class=\"inside-list\"> <div class=\"heading\"><h3>$first_letter</h3><span id=\"$first_letter\"></span></div>"; foreach($pages as $page){ $pages_name = $page->post_title; $pages_href = $page->guid; echo "<div class=\"list-link\"><a href=\"$pages_href\"> $pages_name</a></div>"; } echo "</div>";}
Сделал форычь PHP: <div class="inside"> <?php $pages= get_pages('orderby=title&posts_per_page=10&parent=0'); foreach($pages as $first_letter => $page){ $first_letter = get_first_letter( $page->post_title ); $prev_firstLetter = isset( $pages[ ($first_letter-1) ] ) ? get_first_letter( $pages[ ($first_letter-1) ]->post_title ) : ''; ?> <div class="inside-list"> <?php if($prev_firstLetter != $first_letter){ ?> <div class="heading"><h3><?php echo $first_letter; ?></h3><span id="<?php echo $first_letter; ?>"></span></div> <?php } ?> <?php foreach($pages as $page){ $pages_name = $page->post_title; $pages_href = $page->guid; ?> <div class="list-link"><a href="<?php echo $pages_href; ?>"><?php echo $pages_name; ?></a></div> <?php } ?> </div> <?php } ?> </div> Получил результат почти такой, как надо, правда в каждую при прохождении интерации пишет несколько одинаковых букв и внутри повторяются страницы.
Мне кажется, дело в том, что ты каждый раз первую букву отдельно обрабатываешь. В моём варианте все страницы сначала сортируются по буквам и повторение букв в принципе невозможно. Кстати, а как работает вот это: PHP: $first_letter-1