我有一个数组,其中包含按字母表第一个字母分类的其他美国大学数组。我已经设置了一个测试页面,以便您可以使用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开头的学校。
我的问题是,我应该修改上面的代码,以便在我执行一个大数组之前实现这一点,或者我应该在之后执行此操作吗?
这是一个大问题。 。如果是这样,怎么样? : - )
提前感谢您的帮助。非常感谢。
答案 0 :(得分:0)
您可以编写一个简单的函数,它接受一个数组,以及一个从该数组中提取的键数组,并返回一个只包含这些键及其值的数组。一种array_slice
非数字键:
function values_at($array, $keys) {
return array_intersect_key($array, array_flip($keys));
}
然后您可以这样调用以从字母顺序列表中获得您想要的内容:
$arrayABCDEFGH = values_at($alphabetized, range('A','H'));
答案 1 :(得分:0)
如果您不需要数组的完整副本,那么您应该将上面的代码封装在一个以数组作为参数的函数($ letterRange)中,该函数将保存特定的数组标识符(字母)在最后的阵列中。
然后,您需要使用if块将代码封装在foreach中:
if (in_array($letter, $letterRange)) { ... }
这将导致一个数组只包含$ letterRange中指定字母的字母数组。
答案 2 :(得分: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')));