如何使用 PHP 在字母下显示数组?
Posted
技术标签:
【中文标题】如何使用 PHP 在字母下显示数组?【英文标题】:How to display an Array under alphabetical letters using PHP? 【发布时间】:2021-06-05 22:59:32 【问题描述】:我有一个数组,它已经包含按字母顺序排列的所有值:
Alligator
Alpha
Bear
Bees
Banana
Cat
Cougar
现在我只想列出每个开头的第一个字母,如下所示:
A
---
Alligator
Alpha
B
---
Bear
Bees
Banana
C
---
Cat
Cougar
etc...
如何做到这一点?
【问题讨论】:
【参考方案1】:正如 Shivansh 在他的回答中所说,我认为这是正确的方式
$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)
【讨论】:
【参考方案2】:对于 html 输出:
<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 -->
我更改Artefact2代码并为你分享
<?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;
?>
最好的问候www.Forum.iSYSTEMS.am
【讨论】:
【参考方案3】:这是另一个简单的解决方案:-
$result = array();
foreach ($list as $item)
$firstLetter = substr($item, 0, 1);
$result[$firstLetter][] = $item;
echo "<pre>"; print_r($result);
输出:-
Array (
[A] => Array
(
[0] => Alligator
[1] => Alpha
)
[B] => Array
(
[0] => Bear
[1] => Bees
[2] => Banana
)
[C] => Array
(
[0] => Cat
[1] => Cougar
)
)
【讨论】:
【参考方案4】:嗯,我有三个解决方案。 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;
?>
Php range method
3) 第三种方案的逻辑也与上述两种相同。在这里您可以通过另一种方式获取字母表:)
for ($i=65; $i< =90; $i++)
$x = chr($i);
print $x;
【讨论】:
【参考方案5】:遍历数组并检查当前项目是否以另一个字母开头而不是前一个字母。如果是这种情况,请打印您的“A ---”。
$currentLetter = '';
foreach ($list as $item)
$firstLetter = substr($item, 0, 1);
if ($firstLetter !== $currentLetter)
echo $firstLetter . "\n---\n";
$currentLetter = $firstLetter;
echo $item . "\n";
【讨论】:
【参考方案6】:解决方案是将之前打印的单词的首字母保存在一个变量中,例如:
$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
函数而不是 !==
。
【讨论】:
以上是关于如何使用 PHP 在字母下显示数组?的主要内容,如果未能解决你的问题,请参考以下文章