我本是產品經理一枚,但酷愛寫代碼,自己經常也做些項目。同事也發現博客園特別給力,好多不明白的都在博客園上找到了答案,所以我們也寫一篇文章回饋一下,寫得好也理解一下
根據數據庫數據生成html,項目中需求,需要生成html格式的城市選擇器。城市在數據庫中。

需要生成如下格式,有字母分組,有漢字全拼,漢字名稱

最終展示效果:

下面是實現過程:
1.借助漢字轉拼音的開源庫,pinyin.php 項目地址:https://gitee.com/cik/pinyin_php
2.其他就是自己碼代碼了
1 <?php 2 require 'pinyin.php'; 3 try { 4 $db = new PDO('mysql:host=127.0.0.1;dbname=wzcms', 'root', '404230497'); 5 //查詢 6 $rows = $db->query('SELECT * from baidu_city')->fetchAll(PDO::FETCH_ASSOC); 7 $rs = array(); 8 foreach ($rows as $row) { 9 $rs[] = $row; 10 } 11 $db = null; 12 } catch (PDOException $e) { 13 print "Error!: " . $e->getMessage() . "<br/>"; 14 die; 15 } 16 $html = ''; 17 foreach ($rs as $a => $kv) { 18 $name = $kv['city_name']; 19 //獲得城市名稱 20 $pyall = str_replace(" ", "", ucwords(pinyin($name))); 21 //獲得城市名稱的拼音,在用ucwords() 把拼音首字母轉為大寫 22 $one = strtoupper(pinyin($name, $ret_format = 'first')); 23 //獲得漢字拼音首字母 24 $html[$a]['one'] = strtoupper(pinyin($name, $ret_format = 'one')); 25 //獲得整個詞的第一個字母 方便后面分組 26 $html[$a]['first'] = $one; 27 $html[$a]['html'] = ' <li data-value="' . $one . '" data-tags="' . $pyall . '" class="mui-table-view-cell mui-indexed-list-item">' . $name . '</li>'; 28 //需要生成的html 29 } 30 array_multisort(array_column($html, 'one'), SORT_ASC, $html); 31 //對數組排序 ,按整個詞的首字母排序 32 $list = array_group_by($html, $key = 'one'); 33 //用到數據按鍵值分組 34 foreach (array_group_by($html, $key = 'one') as $a => $kv) { 35 echo '<a>' . $a . '</a>'; 36 //輸出顯示時左側的快速選擇器 37 #echo '<li data-group="'.$a.'" class="mui-table-view-divider mui-indexed-list-group">'.$a.'</li>'; echo "\r\n"; //輸出 分組名稱 38 foreach ($kv as $kv2) { 39 //echo $kv2['html'];// 輸出需要的html 40 //echo "\r\n"; 41 } 42 } 43 /* 44 數據按鍵值分組 45 $arr 傳入數組 46 $key 需分組的鍵值 47 調用方法 array_group_by($html, $key='one'); 48 */ 49 function array_group_by($arr, $key) 50 { 51 $grouped = []; 52 foreach ($arr as $value) { 53 $grouped[$value[$key]][] = $value; 54 } 55 if (func_num_args() > 2) { 56 $args = func_get_args(); 57 foreach ($grouped as $key => $value) { 58 $parms = array_merge([$value], array_slice($args, 2, func_num_args())); 59 $grouped[$key] = call_user_func_array('array_group_by', $parms); 60 } 61 } 62 return $grouped; 63 }
1、中途還查了一下資料,找到這位博主提供的一個分組方法:http://www.cnblogs.com/bluebirds/p/6149029.html
2、展示的效果是mui-master中,效果所用。
demo
https://files.cnblogs.com/files/yipiantian/mui-master.zip
https://files.cnblogs.com/files/yipiantian/demo.zip
