如何打印按字母排序的数组,第一个字符作为标题?

时间:2014-11-12 13:57:42

标签: php html arrays

我正在为WordPress创建一个插件,我厌倦了按字母顺序对用户名进行排序,并把它放到一个简单的列表中,第一个字符是标题。

这是我想要完成的图片:enter image description here

我不需要“#”部分,因为我只有名字而没有办法让他们这样开始。

所以我的数组 $ 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的一部分。

  1. 一个简单的html示例,说明如何在图片中进行列表。
  2. 我是菜鸟,但我真的需要这个!

3 个答案:

答案 0 :(得分:2)

键值方法 - live example

如果$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 />";
}

正值方法 - live example

否则,请跟踪信件。

$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>
*/

?>