Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP显示按字母顺序排列的数组?_Php - Fatal编程技术网

如何使用PHP显示按字母顺序排列的数组?

如何使用PHP显示按字母顺序排列的数组?,php,Php,我有一个数组,它已经按字母顺序包含了它的所有值: Alligator Alpha Bear Bees Banana Cat Cougar 现在我只想列出上面的第一个字母,如下所示: A --- Alligator Alpha B --- Bear Bees Banana C --- Cat Cougar etc... 如何做到这一点?遍历数组,检查当前项是否以前一个字母以外的其他字母开头。如果是这种情况,请打印“A-” 解决方案是将先前打印的单词的第一个字母保留在一个变量中,如:

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

Alligator
Alpha
Bear
Bees
Banana
Cat
Cougar
现在我只想列出上面的第一个字母,如下所示:

A
---

Alligator
Alpha

B
---

Bear
Bees
Banana

C
---

Cat
Cougar

etc...

如何做到这一点?

遍历数组,检查当前项是否以前一个字母以外的其他字母开头。如果是这种情况,请打印“A-”


解决方案是将先前打印的单词的第一个字母保留在一个变量中,如:

$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
函数,而不是
==

我有三种解决方案。 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;
}
?>

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

($i=65;$i<=90;$i++)的
{
$x=chr($i);
打印$x;
}

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

$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)
    }
}
对于HTML输出:

<?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; 
    }
?>
A
  • 标签计数
  • 标签计数
  • 标签计数
  • C
  • 标签计数
  • 标签计数
  • 我更改Artefact2代码并为您共享

    $result = array();
    foreach ($list as $item) {
        $firstLetter = substr($item, 0, 1);
        $result[$firstLetter][] = $item;
    }
    
    echo "<pre>"; print_r($result);
    
    
    

  • 最好的问候

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

    <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 -->
    
    <?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; 
        }
    ?>
    
    $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)
        }
    }