我有一个表单,您可以在其中输入不同的电影并用“|”分隔。该数据库目前包含:
Spider-man|Spider-man 2|Spider-man 3|Apple|Google|Banana|Citrus
我已经完成了这个文本字符串的explode(),所以每个标题都进入一个数组:
$collection = explode('|', $collection);
为了按字母顺序排序,我这样做了:
array_multisort($collection);
到目前为止,没关系。但是,现在我需要使这个数组成为多维的,每个键对应于值开头的字母。它应该是这样的:
Array(
[A] => Array(
'Apple'
)
[B] => Array(
'Banana'
)
[C] => Array(
'Citrus'
)
[G] => Array(
'Google'
)
[S] => Array(
'Spider-man',
'Spider-man 2',
'Spider-man 3'
)
)
我怎样才能做到这一点?
提前致谢, 菲利普
答案 0 :(得分:1)
不是你应该在数据库中存储东西的方式。你应该有一个表,该表与那个将电影各自保存在自己的行中的表相关联。话虽如此:
//array_multisort($collection); // don't need this
sort($collection);
foreach($collection as $movie) {
$result[$movie[0]][] = $movie;
}
如果某些电影以小写字母开头,则:
foreach($collection as $movie) {
$result[strtoupper($movie[0])][] = $movie;
}
ksort($result);
答案 1 :(得分:1)
没有built-in
功能。你需要自己制作一些东西。像这样:
$string = 'Spider-man|Spider-man 2|Spider-man 3|Apple|Google|Banana|Citrus';
$result = array();
foreach(explode('|', $string) as $item) {
$firstLetter = $item[0];
if(!isset($result[$firstLetter])) {
$result[$firstLetter] = array();
}
$result[$firstLetter][] = $item;
}
ksort($result);
var_dump($result);
答案 2 :(得分:0)
$input = 'Spider-man|Spider-man 2|Spider-man 3|Apple|Google|Banana|Citrus';
$collection = array();
$movies = explode('|', $input);
sort($movies);
foreach ($movies as $movie) {
$collection[strtoupper($movie[0])][] = $movie;
}
print_r($collection);