2011-10-12 12 views
6

que tienen una matriz que contiene ya todos lo que es valores en orden alfabético:¿Cómo mostrar una matriz bajo letras alfabéticas usando PHP?

Alligator 
Alpha 
Bear 
Bees 
Banana 
Cat 
Cougar 

ahora sólo quiero a la lista de la primera letra de cada empieza por encima de ella, así:

A 
--- 

Alligator 
Alpha 

B 
--- 

Bear 
Bees 
Banana 

C 
--- 

Cat 
Cougar 

etc... 

¿Cómo puede ser esto estar hecho?

Respuesta

22

La solución es mantener en una variable de la primera letra de la palabra previamente impresa, como:

$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"; 
} 

NB: si algunas entradas comienzan con una letra minúscula y otros con mayúsculas mayúsculas y minúsculas, utilice la función strcasecmp en la prueba en lugar de !==.

+0

Gracias por esta solución! Me ayudó esta noche. – Steve

0

Revise el conjunto y compruebe si el elemento actual comienza con otra letra que no sea la anterior. Si ese es el caso, imprima su "A ---".

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

Bueno, tengo tres soluciones. 1) Haz otra matriz que contenga todos los alfabetos. Luego use foreach para iterar a través de esta matriz. Y en foreach anidado compruebe la existencia de esa letra a través del método strpos de php. Aquí hay un código aproximado.

<?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) el segundo método tiene la misma lógica que la anterior. Pero aquí no es necesario hacer una matriz para los alfabetos. Puedes obtener todos los alfabetos de esta manera.

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

Php range method

3) Tercera solución también tienen misma lógica que por encima de dos. Aquí usted puede conseguir alfabetos por otro camino :)

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

aquí es otra solución sencilla: -

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

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

de salida: -

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

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

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

Para la salida 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 --> 

Cambio el código de Artefact2 y lo comparto por y ou

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

Saludos www.Forum.iSYSTEMS.am

Cuestiones relacionadas