如何使用 PHP 在字母下显示数组?

Posted

技术标签:

【中文标题】如何使用 PHP 在字母下显示数组?【英文标题】:How to display an Array under alphabetical letters using PHP? 【发布时间】:2021-06-05 22:59:32 【问题描述】:

我有一个数组,它已经包含按字母顺序排列的所有值:

Alligator
Alpha
Bear
Bees
Banana
Cat
Cougar

现在我只想列出每个开头的第一个字母,如下所示:

A
---

Alligator
Alpha

B
---

Bear
Bees
Banana

C
---

Cat
Cougar

etc...

如何做到这一点?

【问题讨论】:

【参考方案1】:

正如 Shivansh 在他的回答中所说,我认为这是正确的方式

$result = array();
foreach ($list as $item) 
    $firstLetter = substr($item, 0, 1);
    $result[$firstLetter][] = $item;


echo "<pre>"; print_r($result);

要显示此代码生成的数组,请使用

foreach ( $list as $key => $value ) 
    //Do some thing with $key (A,B,C)
    foreach ($value as $var)
        //Do some thing with $var (Array of A, B ,C)
    

【讨论】:

【参考方案2】:

对于 html 输出:

<h3>A</h3>
<ol>
   <li>
      <em>tag count</em>
      <a href="link to tag">Animal</a>
   </li>
   <li>
      <em>tag count</em>
      <a href="link to tag">Aqua</a>
   </li>
   <li>
      <em>tag count</em>
      <a href="link to tag">Arthur</a>
   </li>
</ol>
<!-- if B not EXIST not show B -->
<h3>C</h3>
<ol>
   <li>
      <em>tag count</em>
      <a href="link to tag">Camel</a>
   </li>
   <li>
      <em>tag count</em>
      <a href="link to tag">Crazy</a>
   </li>
</ol>
<!-- etc -->

我更改Artefact2代码并为你分享

<?php $previous = null;
    foreach ($dataProvider as $key => $tag)  
        $firstLetter = strtoupper(substr($tag['name'], 0, 1));
        if($previous !== $firstLetter)  
            if($key != 0) 
                echo '</ol>';
            ?>
            <h3 class="alpha">
                <span><?php echo $firstLetter;?></span>
            </h3>
            <ol class="tags main">
        <?php  ?>
                <li class="tag">
                    <em><?php echo $tag['TagsCount']; ?></em>
                    <a href="<?php echo $tag['slug']; ?>">
                        <strong><?php echo ucfirst($tag['name']); ?></strong>
                    </a>
                    <span class="perc" style="width: 90px;"></span>
                </li>
        <?php if($key == count($dataProvider)-1)  
            echo '</ol>';
        
            $previous = $firstLetter; 
    
?>

最好的问候www.Forum.iSYSTEMS.am

【讨论】:

【参考方案3】:

这是另一个简单的解决方案:-

$result = array();
foreach ($list as $item) 
    $firstLetter = substr($item, 0, 1);
    $result[$firstLetter][] = $item;


echo "<pre>"; print_r($result);

输出:-

Array (
[A] => Array
    (
        [0] => Alligator
        [1] => Alpha
    )

[B] => Array
    (
        [0] => Bear
        [1] => Bees
        [2] => Banana
    )

[C] => Array
    (
        [0] => Cat
        [1] => Cougar
    )
 )

【讨论】:

【参考方案4】:

嗯,我有三个解决方案。 1)制作另一个包含所有字母的数组。然后使用 foreach 遍历这个数组。并在嵌套的 foreach 中通过 php 的 strpos 方法检查该字母的出现。 这是粗略的代码。

<?php
$alphabets = array ("A","B","C"....); //for all alphabtes
foreach($alphabets as $alphabet)

    echo $alphabet;
    foreach($myArray as $arr)
    
         $pos = strpos($arr, $alphabet);
         if($pos===flase)
         
             //do nothing
         
         else
         
             echo $arr;
         

?>

2) 第二种方法与上面的逻辑相同。但是在这里你不需要为字母制作数组。您可以通过这种方式获取所有字母。

<?php
foreach(range('a', 'z') as $letter) 
    echo $letter;

?>

Php range method

3) 第三种方案的逻辑也与上述两种相同。在这里您可以通过另一种方式获取字母表:)

for ($i=65; $i< =90; $i++) 
 $x = chr($i);
 print $x;

【讨论】:

【参考方案5】:

遍历数组并检查当前项目是否以另一个字母开头而不是前一个字母。如果是这种情况,请打印您的“A ---”。

$currentLetter = '';
foreach ($list as $item) 
   $firstLetter = substr($item, 0, 1);
   if ($firstLetter !== $currentLetter) 
      echo $firstLetter . "\n---\n";
      $currentLetter = $firstLetter;
   
   echo $item . "\n";

【讨论】:

【参考方案6】:

解决方案是将之前打印的单词的首字母保存在一个变量中,例如:

$previous = null;
foreach($array as $value) 
    $firstLetter = substr($value, 0, 1);
    if($previous !== $firstLetter) echo "\n".$firstLetter."\n---\n\n";
    $previous = $firstLetter;

    echo $value."\n";

注意:如果某些条目以小写字母开头而其他条目以大写字母开头,请在测试中使用 strcasecmp 函数而不是 !==

【讨论】:

以上是关于如何使用 PHP 在字母下显示数组?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL 或 PHP 按字母顺序排列多维数组

如何使用php在数组的两个键之间插入一个值?

如何使用php解析json数组并显示?

如何在 ng-repeat 中显示数组的特定字母项?

我将如何使用二维数组来打印季度和总计

如何在不增加的情况下按字母顺序获取下一个字母? (php)