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 に答える