如何使用PHP显示按字母顺序排列的数组?
我有一个数组,它已经按字母顺序包含了它的所有值:如何使用PHP显示按字母顺序排列的数组?,php,Php,我有一个数组,它已经按字母顺序包含了它的所有值: Alligator Alpha Bear Bees Banana Cat Cougar 现在我只想列出上面的第一个字母,如下所示: A --- Alligator Alpha B --- Bear Bees Banana C --- Cat Cougar etc... 如何做到这一点?遍历数组,检查当前项是否以前一个字母以外的其他字母开头。如果是这种情况,请打印“A-” 解决方案是将先前打印的单词的第一个字母保留在一个变量中,如:
Alligator
Alpha
Bear
Bees
Banana
Cat
Cougar
现在我只想列出上面的第一个字母,如下所示:
A
---
Alligator
Alpha
B
---
Bear
Bees
Banana
C
---
Cat
Cougar
etc...
如何做到这一点?遍历数组,检查当前项是否以前一个字母以外的其他字母开头。如果是这种情况,请打印“A-”
解决方案是将先前打印的单词的第一个字母保留在一个变量中,如:
$previous = null;
foreach($array as $value) {
$firstLetter = substr($value, 0, 1);
if($previous !== $firstLetter) echo "\n".$firstLetter."\n---\n\n";
$previous = $firstLetter;
echo $value."\n";
}
注意:如果某些条目以小写字母开头,而其他条目以大写字母开头,请在测试中使用
strcasecmp
函数,而不是==代码>我有三种解决方案。
1) 创建另一个包含所有字母的数组。然后使用foreach遍历该数组。在嵌套的foreach中,通过php的strpos方法检查该字母的出现。
这里是粗略的代码
<?php
$alphabets = array ("A","B","C"....); //for all alphabtes
foreach($alphabets as $alphabet)
{
echo $alphabet;
foreach($myArray as $arr)
{
$pos = strpos($arr, $alphabet);
if($pos===flase)
{
//do nothing
}
else
{
echo $arr;
}
}
?>
2) 第二种方法具有与上述相同的逻辑。但这里不需要为字母表创建数组。用这种方法你可以得到所有的字母表
<?php
foreach(range('a', 'z') as $letter) {
echo $letter;
}
?>
3) 第三种解决方案也具有与上述两种方案相同的逻辑。在这里,您可以通过另一种方式获取字母表:)
($i=65;$i<=90;$i++)的{
$x=chr($i);
打印$x;
}
这里是另一个简单的解决方案:-
$result = array();
foreach ($list as $item) {
$firstLetter = substr($item, 0, 1);
$result[$firstLetter][] = $item;
}
echo "<pre>"; print_r($result);
foreach ( $list as $key => $value ) {
//Do some thing with $key (A,B,C)
foreach ($value as $var){
//Do some thing with $var (Array of A, B ,C)
}
}
对于HTML输出:
<?php $previous = null;
foreach ($dataProvider as $key => $tag) {
$firstLetter = strtoupper(substr($tag['name'], 0, 1));
if($previous !== $firstLetter) {
if($key != 0) {
echo '</ol>';
}?>
<h3 class="alpha">
<span><?php echo $firstLetter;?></span>
</h3>
<ol class="tags main">
<?php } ?>
<li class="tag">
<em><?php echo $tag['TagsCount']; ?></em>
<a href="<?php echo $tag['slug']; ?>">
<strong><?php echo ucfirst($tag['name']); ?></strong>
</a>
<span class="perc" style="width: 90px;"></span>
</li>
<?php if($key == count($dataProvider)-1) {
echo '</ol>';
}
$previous = $firstLetter;
}
?>
A
标签计数
标签计数
标签计数
C
标签计数
标签计数
我更改Artefact2代码并为您共享
$result = array();
foreach ($list as $item) {
$firstLetter = substr($item, 0, 1);
$result[$firstLetter][] = $item;
}
echo "<pre>"; print_r($result);
最好的问候正如Shivansh在上面的回答中所说,我认为这是正确的方式
<h3>A</h3>
<ol>
<li>
<em>tag count</em>
<a href="link to tag">Animal</a>
</li>
<li>
<em>tag count</em>
<a href="link to tag">Aqua</a>
</li>
<li>
<em>tag count</em>
<a href="link to tag">Arthur</a>
</li>
</ol>
<!-- if B not EXIST not show B -->
<h3>C</h3>
<ol>
<li>
<em>tag count</em>
<a href="link to tag">Camel</a>
</li>
<li>
<em>tag count</em>
<a href="link to tag">Crazy</a>
</li>
</ol>
<!-- etc -->
<?php $previous = null;
foreach ($dataProvider as $key => $tag) {
$firstLetter = strtoupper(substr($tag['name'], 0, 1));
if($previous !== $firstLetter) {
if($key != 0) {
echo '</ol>';
}?>
<h3 class="alpha">
<span><?php echo $firstLetter;?></span>
</h3>
<ol class="tags main">
<?php } ?>
<li class="tag">
<em><?php echo $tag['TagsCount']; ?></em>
<a href="<?php echo $tag['slug']; ?>">
<strong><?php echo ucfirst($tag['name']); ?></strong>
</a>
<span class="perc" style="width: 90px;"></span>
</li>
<?php if($key == count($dataProvider)-1) {
echo '</ol>';
}
$previous = $firstLetter;
}
?>
$result = array();
foreach ($list as $item) {
$firstLetter = substr($item, 0, 1);
$result[$firstLetter][] = $item;
}
echo "<pre>"; print_r($result);
foreach ( $list as $key => $value ) {
//Do some thing with $key (A,B,C)
foreach ($value as $var){
//Do some thing with $var (Array of A, B ,C)
}
}