首页 > 解决方案 > 在php中的标题字符下按列显示li项目

问题描述

我有一个如下所示的 php 代码,其中通过 B 行,我计算了按字母顺序对数组结果进行分组时使用的标题字符。A 行打印 4. DEMO

php代码:

<?php
$beta_lists = array (
    'Àpple' => 'http://www.abc.mno/apple/',
    'Ball' => 'http://www.abc.mno/ball/',
    'Builders' => 'http://www.abc.mno/builders/',
    'Bowling' => 'http://www.abc.mno/bowling/',
    'Correct' => 'http://www.abc.mno/correct/',
    'Campaign' => 'http://www.abc.mno/compain/',
    'Direct' => 'http://www.abc.mno/direct/',
    'Degree' => 'http://www.abc.mno/degree/'
);

ksort($beta_lists);
$groups = array();
foreach ($beta_lists as $title => $value) {
    $groups[remove_accents(mb_substr($title, 0, 1))][$title] = $value;
}

ksort($groups);
print_r($groups);       
echo count($groups);   // Line A

if(count($groups)%2==0)  {


}  else  {


}

问题陈述:

我想知道我应该在上面的 php 代码中进行哪些更改,以便它在标题字符下按列打印列表项(如下所示的 2 列) 。

第二列应始终以标题字符开头,而不是列表项。对于偶数个标题字符,50% 的标题字符及其列表项应位于左侧,50% 的标题字符及其列表项应位于右侧。

如果我们有奇数个标题字符(比如说 7 个),那么 4 个标题字符应该在第一列,3 个标题字符应该在第二列,而没有任何列表在第二列被孤立

A                  C

Apple            Correct

B                Compaingn

Ball                D  

Builders         Direct 

Bowling          Degree 

这是我尝试过的:

以下 html 代码需要与上面的 php 代码集成,列表才能按列显示在title characters下。

html代码:

<ul class="shows-list">
    <li class="shows-list__letter">
        <h1 class="shows-list__letter-title"><?php echo esc_html( $title_character ) ?></h1>   <!-- For title character -->
        <a class="shows-list__link" href="<?php echo esc_url( $permalink ); ?>"><h2 class="shows-list__title"><?php echo esc_html( $title ); ?></h2></a>  
    </li>
</ul>

这里的$title是 Apple、Ball、Builders、Bowling、Correct、Compaign、Direct 和 Degree。

标签: phphtmlhtml-lists

解决方案


一种可能的解决方案是将左右列提取到单独的数组中。

PHP

<?php
$beta_lists = [
    'Apple' => 'http://www.abc.mno/apple/',
    'Ball' => 'http://www.abc.mno/ball/',
    'Builders' => 'http://www.abc.mno/builders/',
    'Bowling' => 'http://www.abc.mno/bowling/',
    'Correct' => 'http://www.abc.mno/correct/',
    'Campaign' => 'http://www.abc.mno/compain/',
    'Direct' => 'http://www.abc.mno/direct/',
    'Degree' => 'http://www.abc.mno/degree/',
    //'Example' => 'http://www.abc.mno/example/',
];

ksort($beta_lists);

$groups = [];

foreach ($beta_lists as $title => $value) {
    $groups[remove_accents(mb_substr($title, 0, 1))][$title] = $value;
}

ksort($groups);

$left = array_slice($groups, 0, ceil(count($groups) / 2));
$right = array_slice($groups, count($left));

HTML

<ul class="shows-list">
<?php foreach ($left as $title_character => $meta): ?>
    <li class="shows-list__letter">
        <h1 class="shows-list__letter-title"><?= esc_html( $title_character ) ?></h1>   <!-- For title character -->
    <?php foreach ($meta as $title => $permalink): ?>
        <a class="shows-list__link" href="<?= esc_url( $permalink ); ?>"><h2 class="shows-list__title"><?= esc_html( $title ); ?></h2></a>
    <?php endforeach; ?>
    </li>
<?php endforeach; ?>
</ul>

并以这种方式打印右列。


推荐阅读