我正在为WordPress创建一个插件,我厌倦了按字母顺序对用户名进行排序,并把它放到一个简单的列表中,第一个字符是标题。
这是我想要完成的图片:
我不需要“#”部分,因为我只有名字而没有办法让他们这样开始。
所以我的数组 $ stuck 已经按字母顺序排列了值。
我正在使用它:
foreach ($stack as $key => $val) {
$Firstchar = mb_substr(mb_strtoupper($val, "utf-8"),0,1,'utf-8');
// getting the first character of each value to create a title
但是我真的不知道如何从这里开始处理我尝试了很多不同的方法但没有成功,所以如果有人能帮我解决这个问题,我将非常感谢谢谢!
我需要做两件事:
1.为图片中的名称创建字母标题的方法,困难的部分是我依赖于存在的名称,所以如果没有以字母“b”开头的名称那里根本不是b的一部分。
我是菜鸟,但我真的需要这个!
答案 0 :(得分:2)
如果$stack
安排得像这样;
$array = array("a" => array("apples", "ankle"),
"b" => array("batman", "bruce"),
"c" => array("comic", "cat")
);
然后我们可以做一个嵌套的foreach
$array = array("a" => array("apples", "ankle"),
"b" => array("batman", "bruce"),
"c" => array("comic", "cat")
);
foreach($array as $key => $values) {
echo $key . PHP_EOL . PHP_EOL;
echo "<ul>";
foreach($values as $vals) {
echo "<li>". $vals ."</li>";
}
echo "</ul> <br />";
}
否则,请跟踪信件。
$array = array("apples", "ankle", "batman", "bruce", "comic", "cat");
$current_letter = strtoupper( substr($array[0], 0, 1) ); //Grab the starting letter
echo $current_letter . PHP_EOL;
foreach($array as $values) { //Loop through our array
if( strtoupper($values[0]) != $current_letter ) { //If the first letter doesn't match the title
$current_letter = strtoupper($values[0]); //Overwrite the title letter
echo PHP_EOL . strtoupper($current_letter) . PHP_EOL; //Echo the title letter
}
echo $values . "<br />"; //Echo the word
}
答案 1 :(得分:2)
我创建了一个数组,其中index是字母,内容是一个包含person数据的数组。
$arrayPerson = array(array("name" => "Anderson", "job" => "Some Job"), array("name" => "Barney", "job" => "Some Job"));
$letter = '';
foreach ($arrayPerson as $personData) {
if (!$letter || strtolower($personData['name'][0]) != $letter) {
$letter = strtolower($personData['name'][0]);
}
$html[$letter][] = array($personData["name"], $personData["job"]);
}
然后我只打印$ html的内容
foreach($html as $letter => $innerArray) {
print $letter."<br />";
foreach($innerArray as $data) {
print $data[0]."-".$data[1];
}
}
答案 2 :(得分:1)
即使单词/标题未排序(如下例所示),您也可以这样做:
<?php
$stack = array(
'Acid Factory',
'Acno\'s Energizer',
'Alex in Danger',
'Cable Capers 3',
'Hangaroo',
'Evac',
'Exile',
'Doodle',
'FA-18',
'Gun Run',
'Egg Run',
'Heli Attack'
);
function make_dictionary( &$words ) {
foreach ( $words as $word )
if (!in_array( strtoupper( $word[0] ), $words )) $words[] = strtoupper( $word[0] );
natcasesort( $words );
};
function print_dictionary( $words ) {
echo '<ul>';
foreach ( $words as $word )
( strlen( $word )==1 ) ? print_title( $word ) : print_word( $word );
echo '</ul>';
};
function print_title( $word ) {
echo '<li><h3>' . $word . '</h3></li>';
};
function print_word( $word ) {
echo '<li>' . $word . '</li>';
};
make_dictionary( $stack );
print_dictionary( $stack );
/* This will output HTML:
<ul>
<li>
<h3>A</h3>
</li>
<li>Acid Factory</li>
<li>Acno's Energizer</li>
<li>Alex in Danger</li>
<li>
<h3>C</h3>
</li>
<li>Cable Capers 3</li>
<li>
<h3>D</h3>
</li>
<li>Doodle</li>
<li>
<h3>E</h3>
</li>
<li>Egg Run</li>
<li>Evac</li>
<li>Exile</li>
<li>
<h3>F</h3>
</li>
<li>FA-18</li>
<li>
<h3>G</h3>
</li>
<li>Gun Run</li>
<li>
<h3>H</h3>
</li>
<li>Hangaroo</li>
<li>Heli Attack</li>
</ul>
*/
?>