php 實現城市選擇器 h5城市選擇器


我本是產品經理一枚,但酷愛寫代碼,自己經常也做些項目。同事也發現博客園特別給力,好多不明白的都在博客園上找到了答案,所以我們也寫一篇文章回饋一下,寫得好也理解一下

 

根據數據庫數據生成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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM