1

アルファベットの最初の文字で分類された米国の大学の他の配列を含む配列があります。print_rを使用して配列を表示できるように、テストページを設定しました。そのページは次のとおりです。

http://apps.richardmethod.com/Prehealth/Newpublic/test.php

その配列を作成するために、次のコードを使用しました。

    $alphabetized = array();

    foreach (range('A', 'Z') as $letter) {

            // create new array based on letter
            $alphabetized[$letter] = array();

            // loop through results and add to array
            foreach ( $users as $user ) {
                    $firstletter = substr($user->Schoolname, 0, 1);

                    if ( $letter == $firstletter ) {
                        array_unshift( $alphabetized[$letter], $user );
                    }
            }
    }

ここで、配列を分割して、特定の範囲の文字が各配列に含まれるようにします。例えば、

arrayABCEFGH-文字A、B、C、D、E、F、G、およびHで始まる学校が含まれます。

私の質問は、1つの大きな配列を実行する前にこれを達成するように上記のコードを変更する必要がありますか、それとも後で実行する必要がありますか?

そして、ここに大きな問題があります。。もしそうなら、どのように?:-)

助けてくれてありがとう。大変感謝しております。

4

3 に答える 3

0

配列と、その配列から抽出するキーの配列を受け取り、それらのキーとその値のみを含む配列を返す単純な関数を作成できます。array_slice非数値キーの一種:

function values_at($array, $keys) {
    return array_intersect_key($array, array_flip($keys));
}

次に、このように呼び出して、アルファベット順のリストから必要なものを取得できます。

$arrayABCDEFGH = values_at($alphabetized, range('A','H'));
于 2012-11-01T01:20:30.117 に答える
0

配列の完全なコピーが必要ない場合は、引数として配列($ letterRange)を持つ関数に上記のコードをカプセル化する必要があります。これにより、特定の配列識別子(文字)が最終的に保持されます。配列。

次に、ifブロックを使用してforeach内にコードをカプセル化する必要があります。

if (in_array($letter, $letterRange)) { ... }

これにより、$letterRangeで指定された文字の文字配列のみを含む配列になります。

于 2012-11-01T01:22:46.777 に答える
0

まず、配列を生成するコードは、次のように繰り返すだけで簡単にできます$users

$alphabetized = array();

// loop through results and add to array
foreach ($users as $user) {
    $firstletter = strtoupper($user->Schoolname[0]);

    $alphabetized[$firstletter][] = $user;
}
// sort by first letter (optional)
ksort($alphabetized);

最初の8つのエントリを取得するには、次を使用できますarray_slice

array_slice($alphabetized, 0, 8);

すべての最初の文字が実際に使用さksort()れ、A〜Hからも得られる完全な配列で使用したと仮定します。それ以外の場合はarray_intersect_key()、クエリする文字の範囲を反転して使用する必要があります。

array_intersect_key($alphabetized, array_flip(range('A', 'H')));
于 2012-11-01T01:35:01.097 に答える