回显A-Z列表中的数组

时间:2012-04-26 21:14:44

标签: php arrays loops alphabetical

说我有以下数组:

$aTest = array('apple', 'pear', 'banana', 'kiwi', 'pineapple', 'strawberry');

我需要能够从A-Z创建一个列表,并在每个字母下显示数组中的相关值。例如A - Apple,B - 香蕉,C - 空,D - 空,... K - Kiwi .. P - 梨,菠萝等。

有人可以帮帮我吗?我假设我使用范围从A-Z循环,但后来我不确定如何从数组中回显相关值(并且在每个字母内按字母顺序排列,即菠萝之前的梨)

由于

3 个答案:

答案 0 :(得分:3)

我建议您使用sort()将它们全部按顺序排列。然后,跟踪第一个字母。任何时候它改变,保存并输出它。

sort( $aTest );

$currChar = '';
foreach ( $aTest as $word) {
  if ( $word[0] != $currChar ) {
    $currChar = $word[0];
    echo $currChar . PHP_EOL;
  }
  echo $word . PHP_EOL;
}

从您的初始数组中,这将产生以下结果:

a
apple
b
banana
k
kiwi
p
pear
pineapple
s
strawberry

答案 1 :(得分:2)

通过使用条件和一些内置函数;这段代码有点粗糙,但是它可以解决问题:

<?php
    $aTest=array('apple','pear','banana','kiwi','pineapple','strawberry');
    $len=(count($aTest)-1);
    $letters=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    $str=null;
    foreach($letters as $letter) {
        for($i=0;$i<=$len;$i++) {
            $str=strtoupper($letter).' - ';
            if(strtolower(substr($aTest[$i],0,1))==strtolower($letter)) {
                $str.=$aTest[$i];
                break;
            } elseif($i==$len) {
                $str.='empty';
            }
        }
        echo($str.'<br />');
    }
?>

答案 2 :(得分:1)

<?php
$aTest = array('apple', 'pineapple', 'banana', 'kiwi', 'pear', 'strawberry');

$range = range('a','z');

$output = array();

foreach($range AS $letters){
    foreach($aTest AS $fruit){
        if(strtolower($fruit[0]) == $letters){
            $output[$letters][] = $fruit;
        }
    }
}

foreach($output AS $letter => $fruits){
    echo $letter . "<br/>--------<br/>\n";
    sort($fruits);
    foreach($fruits AS $indFruit){
        echo $indFruit . "<br/>\n";
    }
    echo "<br/>\n";
}
?>