首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一个大范围数组创建不同的范围数组

从一个大范围数组创建不同的范围数组
EN

Stack Overflow用户
提问于 2012-11-01 09:09:23
回答 3查看 66关注 0票数 1

我有一个数组,其中包含按字母表的第一个字母分解的美国大学的其他数组。我已经设置了一个测试页面,以便您可以使用print_r查看数组。该页面是:

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

为了创建该数组,我使用了以下代码:

代码语言:javascript
复制
    $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开头的学校。

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

这里有一个大问题。。如果有,是如何做到的?:-)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-01 09:35:01

首先,只需在$users上迭代,就可以简化生成数组的代码

代码语言:javascript
复制
$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

代码语言:javascript
复制
array_slice($alphabetized, 0, 8);

假设实际上使用了所有的第一个字母,并且在整个数组上使用了ksort(),这也给出了A- H。否则,您必须使用array_intersect_key()和要查询的字母的翻转范围。

代码语言:javascript
复制
array_intersect_key($alphabetized, array_flip(range('A', 'H')));
票数 0
EN

Stack Overflow用户

发布于 2012-11-01 09:20:30

您可以编写一个简单的函数,该函数接受一个数组和一个要从该数组中提取的键的数组,并返回一个仅包含这些键和它们的值的数组。一种用于非数字键的array_slice

代码语言:javascript
复制
function values_at($array, $keys) {
    return array_intersect_key($array, array_flip($keys));
}

然后,您可以像这样调用它,以便从按字母顺序排列的列表中获取您想要的内容:

代码语言:javascript
复制
$arrayABCDEFGH = values_at($alphabetized, range('A','H'));
票数 0
EN

Stack Overflow用户

发布于 2012-11-01 09:22:47

如果不需要数组的完整副本,那么应该将上述代码封装在一个以数组作为参数($letterRange)的函数中,该函数将保存最终数组中的特定数组标识符(字母)。

然后,您需要使用if块将代码封装在foreach中:

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

这将导致数组仅包含$letterRange中指定字母的字母数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13169655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档