2

假设我有以下数组:

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

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

有人可以帮帮我吗?我假设我使用范围从 AZ 循环,但我不确定如何从数组中回显相关值(以及每个字母中的字母顺序,即梨在菠萝之前)

谢谢

4

3 回答 3

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
于 2012-04-26T21:20:43.310 回答
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 />');
    }
?>
于 2012-04-26T21:37:44.670 回答
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";
}
?>
于 2012-04-26T21:22:39.070 回答