Group array results in Alphabetic order PHP

后端 未结 3 945
执念已碎
执念已碎 2020-12-10 08:44

I\'m using below code to display Image & Name of webisites form database.

A

相关标签:
3条回答
  • This is a modification of @Hugo Delsing's answer.

    I needed to be able to group my brands together like this, but one bug in the code was the fact that if I had say iForce Nutrition and Inner Armour it would group these into two separate groups because of the letter case.

    Changes I Made
    Because it was fully alphabetical, it was only going by first letter I changes SORT_STRING to SORT_NATURAL

    Changed: if ($char !== $lastChar) to if (strtolower($char) !== strtolower($lastChar))

    <?php
    $records = ['FinaFlex', 'iForce Nutrition', 'Inner Armour', 'Dymatize', 'Ultimate    Nutrition'];
    $lastChar = '';
    sort($records, SORT_NATURAL | SORT_FLAG_CASE); //Allows for a full comparison and will alphabetize correctly.
    
    foreach($records as $val) {
     $char = $val[0]; //first char
    
      if (strtolower($char) !== strtolower($lastChar)) {
        if ($lastChar !== '')
         echo '<br>';
    
         echo strtoupper($char).'<br>'; //print A / B / C etc
         $lastChar = $char;
        }
    
        echo $val.'<br>';
      }
    ?>
    

    The final output will be like this

    D
    Dymatize
    
    F
    FinaFlex
    
    I
    iForce Nutrition
    Inner Armour
    
    U
    Ultimate Nutrition
    

    I hope this helps everyone, and a big thank you to Hugo for providing the code that got me exactly where I needed to be.

    You can see my example here https://hyperionsupps.com/brand-index

    0 讨论(0)
  • 2020-12-10 09:23

    You can use array sorting to sort the array. In your case I would choose sort()

    Now to show the links with a preceding Letter I would use:

    <?php
    $records = ['Aaaaa', 'Aaaa2', 'bbb', 'bbb2', 'Dffffd'];
    $lastChar = '';
    sort($records, SORT_STRING | SORT_FLAG_CASE); //the flags are needed. Without the `Ddd` will come before `bbb`.
    //Available from version 5.4. If you have an earlier version (4+) you can try natcasesort()
    
    foreach($records as $val) {
      $char = $val[0]; //first char
    
      if ($char !== $lastChar) {
        if ($lastChar !== '')
          echo '<br>';
    
        echo strtoupper($char).'<br>'; //print A / B / C etc
        $lastChar = $char;
      }
    
     echo $val.'<br>';
    }
    ?>
    

    This will output something like

    A
    Aaaa2
    Aaaaa
    
    B
    bbb
    bbb2
    
    D
    Dffffd
    

    Notice that the C is missing, because there are no words starting with C.

    0 讨论(0)
  • 2020-12-10 09:37
    $records = ['FinaFlex', 'iForce Nutrition', 'Inner Armour', 'Dymatize', 'Ultimate    Nutrition'];
    
        $temp=array();    
        $first_char="";
        for($i=0;$i<count($records);$i++)
        {
            $first_char= strtoupper ($records[$i][0]);             
                 if(!in_array($first_char, $temp))
                 {
                     echo strtoupper($first_char).'<br>'; //print A / B / C etc                      
    
                 }
                 $temp[]=  $first_char;
                echo $records[$i]."<br>";
        }
    
    0 讨论(0)
提交回复
热议问题