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 开头的学校。

我的问题是,我应该修改上面的代码,以便在我做一个大数组之前实现这一点,还是应该在之后做?

这是一个大问题。. 如果是这样,如何?:-)

提前感谢您的帮助。非常感谢。

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 回答