[在php中逐列显示li项目

问题描述 投票:0回答:1

我有如下所示的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代码集成在一起,列表才能在标题字符下按列显示。

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。

php html html-lists
1个回答
2
投票

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

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>

并且也以这种方式打印右列。

© www.soinside.com 2019 - 2024. All rights reserved.