我有一个数组,其中包含按字母表的第一个字母分解的美国大学的其他数组。我已经设置了一个测试页面,以便您可以使用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开头的学校。
我的问题是,我应该修改上面的代码,以便在做一个大数组之前实现这一点,还是应该在做完之后再做?
这里有一个大问题。。如果有,是如何做到的?:-)
提前感谢您的帮助。非常感谢。
发布于 2012-11-01 09:35:01
首先,只需在$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-01 09:20:30
您可以编写一个简单的函数,该函数接受一个数组和一个要从该数组中提取的键的数组,并返回一个仅包含这些键和它们的值的数组。一种用于非数字键的array_slice:
function values_at($array, $keys) {
return array_intersect_key($array, array_flip($keys));
}然后,您可以像这样调用它,以便从按字母顺序排列的列表中获取您想要的内容:
$arrayABCDEFGH = values_at($alphabetized, range('A','H'));发布于 2012-11-01 09:22:47
如果不需要数组的完整副本,那么应该将上述代码封装在一个以数组作为参数($letterRange)的函数中,该函数将保存最终数组中的特定数组标识符(字母)。
然后,您需要使用if块将代码封装在foreach中:
if (in_array($letter, $letterRange)) { ... }
这将导致数组仅包含$letterRange中指定字母的字母数组。
https://stackoverflow.com/questions/13169655
复制相似问题