k-means聚类算法介绍 k-means聚类算法怎么用

 更新时间:2016年12月31日 09:44  点击:1555
k-means聚类算法怎么用?K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,本次一聚教程网为大家带来的k-means聚类算法介绍将为大家详细介绍k-means聚类算法的原理、作用和用法。

前提条件

特定领域的经验要求:无

专业经验要求:无行业经验

不需要机器学习的知识,但是读者应该熟悉基本的数据分析(如,描述性分析)。为了实践该示例,读者也应该熟悉Python。

K-means聚类简介

K-means聚类是一种无监督学习,用于有未标记的数据时(例如,数据没有定义类别或组)。该算法的目标是在数据中找到分组,变量K代表分组的个数。该算法迭代地分配每个数据点到提供特征的K分组中的一个。数据点基于特征相似性聚集。K-means聚类算法的结果是:

1. K聚类的质心,它可以用来标记新数据

2. 训练数据标记(每个数据点被分配到一个单一的集群 )

聚类允许你发现和分析有机形成的组,而不是在查看数据之前定义组。下面例子中“选择K”的步骤描述如何确定组的数目。

集群的每个质心都是特征值的集合,它定义所产生的组。检查质心特征权重可以用来定性解释每个集群代表什么样的组。

这篇K-means聚类算法涵盖了:

  • 使用K-means的常见商业案例

  • 运行该算法所涉及的步骤

  • 使用一个配送车队数据的Python示例

商业用途

K-means聚类算法用来查找那些包含没有明确标记数据的组。这可以用于确定商业假设,存在什么类型的分组或为复杂的数据集确定未知组。一旦该算法已运行并定义分组,任何新数据可以很容易地分配到正确的组。

这是一个通用算法,可以用于任何类型的分组。用例的一些例子是:

  • 行为细分

    • 根据购买历史细分

    • 根据应用程序、网站或平台上的活动细分

    • 定义基于利益的角色

    • 基于活动监视创建图表

  • 库存分类

    • 按销售活动分

    • 按生产指标分

  • 传感器测量数据分类

    • 检测运动传感器中的活动类型

    • 图片分组

    • 分离音频

    • 健康检测中的分组

  • 检测机器人或异常

    • 来自机器人的单独有效活动组

    • 清理孤立点检测的有效活动组

此外,监测是否一个被跟踪的数据点随着时间在组之间切换,这可以用来检测数据有意义的变化。

算法

Κ-means聚类算法使用迭代细化来产生最终的结果。该算法的输入是聚类的数目Κ和数据集。数据集是每个数据点特征的集合。该算法从为K质点初始估计开始,它可以随机生成或从数据集中随机选择。然后该算法在以下两步之间迭代:

1. 数据分配步骤

每个质点定义一个聚类。在本步骤中,每个数据点被分配到离它最近的质心,基于欧氏距离的平方。更准确地说,如果ci是集合C质心的集合,然后每个数据点x被分配到一个聚类,基于

dist( · )是标准(L2)欧氏距离。数据点集分配每个ith聚类质心Si。

2. 质心更新步骤:

在本步骤中,质心被重新计算。这通过分配所有数据点的平均值到质心的聚类来实现。

该算法在步骤1和步骤2之间迭代直到满足停止标准(如,没有数据点改变聚类,距离之和最小化,或者达到了最大的迭代次数)。

该算法保证收敛到一个结果。其结果可能是一个局部最优(例如,不一定是最好的结果),意思是使用随机开始质心评估多个运行的算法可能给出更好的结果。

选择K

上述算法查找聚类和一个特定的预先选定K的带标记的数据。为了查找数据中的聚类个数,用户需要为在K值范围内运行K-means聚类算法并比较结果。总体而言,目前还没有确定K精确值的方法,但可以使用以下技术获得准确的估计。

通常用于比较不同K值结果的度量之一是数据点和它们聚类质心的平均距离。由于增加聚类的数量总是会减少数据点的距离,增加K总

是会降低这个度量,当k与数据点数相同时达到极值。因此,这个度量不能作为唯一的指标。相反,平均距离到质心作为一个函数的K

被绘制并且急剧下降率的地方“肘点”,可用于大致确定K。

有许多其它技术确认K,包括交叉验证、信息标准、信息理论跳法、影像法和G-means算法。另外,监测数据点跨组分布可以深入了解

该算法如何为每个k分割数据。

示例:应用K-Means聚类到配送车队数据

举例来说,我们将展示K-means算法如何处理配送车队司机数据的样本数据集。简单起见,我们只会看两个司机特征:平均每天驾驶距离和一个司机>5mph以上速度限制的平均时间百分比。总

体而言,该算法可以用于任何数量的特征,只要数据样本的个数比特征的数量大的多。

步骤1:清洁和改造数据

在本例中,我们已经清理并完成了一些简单的数据转换。数据样本作为pandas DataFrame如下所示。

下面的图表显示了4,000个司机的数据集,x轴表示距离特征,y轴表示加速特征。

步骤2: 选择K并运行该算法

首先选择K=2。对于本例,使用Python包scikit-learn和NumPy进行计算,如下所示:

类别标记以kmeans.labels_返回。

步骤3:审查结果 

结果如下所示。你可以看到K-means算法基于距离特征分成两组。每个聚类质心用一颗星标记。

  • 组1的质心 = (49.62, 8.72)

  • 组2的质心 = (179.73, 17.95)

使用数据集的领域知识,我们可以推断组1是都市司机,组2是乡村司机。

步骤4: 对K的多个值迭代

测试K=4的结果。完成这个,你只需要的改变是KMeans()函数中聚类的目标数量。

下面的图表显示了聚类的结果。我们看到由该算法确定了四个不同的组;现在超速驾驶的司机已经与那些遵守速度限制的分开,除了乡村和都市的差别。城市驾驶组比农村司机的速度门槛较

低,可能是由于城市司机在交叉路口和停车交通上花费更多的时间。

附加说明和备选方案

特征工程

特征工程是使用领域知识选择哪些数据度量作为特征输入到机器学习算法的过程。特征工程在K-means聚类中起着关键作用;使用有意义的特征捕获数据的可变性至关重要,针对算法找出所有自然产生的组。

分类数据(例如,分类标志如性别,国家,浏览器类型)需要被编码或者以一种仍然可以使用该算法的方式分离数据。

特征变换,特别是代表利率而不是测量,可以帮助规范化数据。例如,在上面交付车队的例子中,如果使用总驾驶距离而不是每天平均距离,那么驾驶员通过他们在公司驾驶多久而不是乡村和都市的分组。

备选方案

有很多可供替代的聚类算法存在,包括DBScan,谱聚类,和高斯混合建模。维数约减技术,如主成分分析,可以用于数据中的不同组模式。一种可能的结果是数据中没有有机聚类;相反,所

有的数据沿着一个单一组的连续特征范围。既然这样,你可能需要重新查看数据特征以查看是否需要包括不同的测量或者特征变换将更好地代表数据的可变性。此外,你可能想强加分类或者

基于知识领域标记并修改你的分析方法。

代码优化对于程序员来讲是非常的重要了,我们今天来为各位介绍一下关于24条php代码优化的教程,希望文章对各位有帮助.

echo比print快。
使用echo的多重参数代替字符串连接。
在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
对global变量,应该用完就unset()掉。
用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。
函数代替正则表达式完成相同功能。
当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。
使用选择分支语句(switch case)好于使用多个if,else if语句。
利用var_dump进行PHP代码调试。如果你在寻找php调试技术,我必须说var_dump应该是你要找的目标,在显示php信息方面这个命令可以满足你的所有需要,而调试代码的多数情况与得到PHP中的数值有关。
在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。
动辄创建全局数值是一种糟糕的做法,不过有时候实际情况的确又需要这么做。对于数据库表或数据库连接信息使用全局数值是一个不错的想法,但不要在你的PHP代码中频繁使用全局数值。另外,更好的一种做法是把你的全局变量存放在一个config.php文件中。
如果你想知道脚本开始执行的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
打开apache的mod_deflate模块。
用@屏蔽错误消息的做法非常低效。
尽量采用大量的PHP内置函数。
递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
派生类中的方法运行起来要快于在基类中定义的同样的方法。
仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)
Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
正如之前提到的,任何php网站中最重要的部分有99%的可能是数据库。因此,你需要非常熟悉如何正确的使用sql,学会关联表和更多高级的数据库技术。
调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。
当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回zval结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。
并不是所有情况都必须使用面向对象开发,面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

1.在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
2.尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
3.优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
4.尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
5.循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
6.多维数组尽量不要循环嵌套赋值;
7.在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
8.foreach效率更高,尽量用foreach代替while和for循环;
9.用单引号替代双引号引用字符串;
10.“用i =1代替i=i 1。符合c/c 的习惯,效率还高”;
11.对global变量,应该用完就unset()掉
12.在多重嵌套循环中,如有可能,应当将最长的循环放在内层,最短循环放在外层,这样就可以减少cpu跨切循环层的次数,从而优化程序性能。
PHP代码优化的53个细节

1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
2、$row['id'] 的速度是$row[id]的7倍。
3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
5、注销那些不用的变量尤其是大数组,以便释放内存。
6、尽量避免使用__get,__set,__autoload。
7、require_once()代价昂贵。
8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME']要好于time()。
10、函数代替正则表达式完成相同功能。
11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
14、用@屏蔽错误消息的做法非常低效,极其低效。
15、打开apache的mod_deflate模块,可以提高网页的浏览速度。
16、数据库连接当使用完毕时应关掉,不要用长连接。
17、错误消息代价昂贵。
18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
19、递增一个全局变量要比递增一个局部变量慢2倍。
20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java 代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
36、并非要用类实现所有的数据结构,数组也很有用。
37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
38、当你需要时,你总能把代码分解成方法。
39、尽量采用大量的PHP内置函数。
40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
48、多维数组尽量不要循环嵌套赋值;
49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
50、foreach效率更高,尽量用foreach代替while和for循环;
51、用单引号替代双引号引用字符串;
52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
53、对global变量,应该用完就unset()掉;

最后,总结一下常见而重要的php优化策略:

一、 在includes和requires中使用绝对路径,这样在分析路径花的时间更少;
二、 在循环里别用函数,例如For($x=0; $x < count($array); $x), count()函数在外面先计算;
三、 使用error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在php.ini文件里。可是如果你在用一个共享的虚拟主机,php.ini你不能修改,那么你最好添加error_reporting(0)函数,放在每个脚本文件的第一行(或用require_once()来加载)这能有效的保护敏感的SQL查询和路径在出错时不被显示;
四、 禁止过多的循环套循环,嵌套过多的循环会拉低执行效率
五、 禁止在循环内部执行相关的查询语句,除非万不得以,不然千万不可这么操作
六、 尽量使用单引号联接字符串
七、 尽可能的减少变量复制操作。例如:$description = $_POST['description'];
八、 当if/else过多时,尽可能的使用switch/case 代替 if/else。能够使代码更加简明
九、 开启缓存机制有助于提升性能,同时降低MySQL负载
十、 开启gzip压缩

微信access_token在开发时会变的好像是几分种不一样了,这里我们来看一篇关于PHP定时任务获取微信access_token的例子吧。

最近开发微信公众平台,公众号调用各接口时都需使用access_token,access_token是公众号的全局唯一接口调用凭据,开发时需要进行妥善保存。 access_token有效期为7200秒 ,重复获取将导致上次获取的access_token失效。
由于微信对获取access_token的api调用次数做了限制,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务。
那么有什么好的解决access_token存储和刷新的办法呢? 我的办法是:计划任务定时刷新获取access_token,然后将access_token保存到服务器本地,保存方式可以是文件、数据库或缓存中。
下面我使用PHP来获取access_token,并保存到本地文件中。建立一个access.php,代码如下:
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".AppID."&secret=".AppSecret;
 
$result = http_request($url);
//生成文件,保存token
$dir = __DIR__; //真实路径,crontab命令的php执行在cli模式下,不能正确识别相对路径,所以使用__DIR__
$filename = $dir."/access_token.php";
create_file($filename, $result);
 
function http_request($url,$data = null){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
 
//生成文件
function create_file($filename, $content){
    $fp = fopen($filename, "w");
    fwrite($fp, "" . $content);
    fclose($fp);
}
以上代码中AppID和AppSecret这两个常量是由微信公众平台提供,可以登录到微信公众平台的基本配置里获取。获取到的access_token被保存到文件access_token.php中,注意这个文件内容不要被用户访问到。
接下来,我们设置定时任务,我们以Linux的CentOS为例,使用crontab设置计划任务。
5 * * * * /usr/local/bin/php -f /home/web/access.php >> /dev/null 2>&1
以上命令设置了每隔1小时,即每小时的第05分钟执行access.php。
这样,我们就可以保证access_token的正常获取和使用,不用频繁的去刷新微信服务器了。

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一,下面我们来看看吧。

简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那做起来就很方便了。

SSO 登录请求接口往往是接口加上一个回调地址,访问这个地址会跳转到回调地址并带上一个 ticket 参数,拿着这个 ticket 参数再请求接口可以获取到用户信息,如果存在用户则自动登录,不存在就新增用户并登录。


比如这个 SSO 模型实现了两个方法,一个是获取接口 url,一个是凭 ticket 获取用户信息:

PHP

interface SSOLogin
{
    /**
     * 获取登录用户信息
     * @param $ticket
     * @return mixed
     */
    public function getInfoFromTicket($ticket);

    /**
     * 单点登录授权地址
     * @return mixed
     */
    public function getAuthUrl();
}

再来看看控制器的主要方法,比如回调地址是跳转到控制器 http://www.example.com/sso/check?ticket=xxxx


/**
 * 检测是否单点登录
 * @return bool|string
 */
public function actionCheck()
{
    $ticket = Yii::$app->getRequest()->get('ticket');
    if (!$ticket) {
        return $this->renderAuthError('请先授权', sprintf('<a href="%s">点击登录单点登录系统</a>', SSOlogin::getInstance()->getAuthUrl()));
    }
    $userInfo = SSOlogin::getInstance()->getInfoFromTicket($ticket);
    if (empty($userInfo['username'])) {
        return $this->renderAuthError('请先授权', sprintf('<a href="%s">点击登录单点登录系统</a>', SSOlogin::getInstance()->getAuthUrl()));
    }
 
    $username = $this->getUserName($userInfo['username']);
    $user = User::find()->canLogin()->username($username)->one();
    if (!$user) {
        $newUser = [];
        $newUser['username'] = $userInfo['username'];
        $newUser['email'] = $this->getUserName($userInfo['username']);
        $newUser['role'] = User::ROLE_DEV;
        $newUser['is_email_verified'] = 1;
        $newUser['realname'] = $userInfo['truename'];
        $user = $this->addUser($newUser);
    }
    $isLogin = Yii::$app->user->login($user, 3600 * 24 * 30);
    if ($isLogin) {
        $this->redirect('/task/index');
    }
    return true;
}
大概看看这个控制器逻辑就明白了。SSO 接口起到的作用就是获取用户信息,拿这个用户信息跟系统用户表对比,存在用户则进行登录,不存在创建用户并登录。

这是一个内部的单点系统,集成到后台,可能其他的 SSO 跟这不太一样,但基本原理过程差不多。

[!--infotagslink--]

相关文章

  • php svn操作类

    以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#几种排序算法

    作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序  冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • PHP实现递归无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把...2015-10-23
  • mybatis-plus实体类主键策略有3种(小结)

    这篇文章主要介绍了mybatis-plus实体类主键策略有3种(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-27
  • ecshop商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
  • C#类中static变量用法分析

    这篇文章主要介绍了C#类中static变量用法,实例分析了static变量使用技巧与相关注意事项,需要的朋友可以参考下...2020-06-25
  • PHP 一个完整的分页类(附源码)

    在php中要实现分页比起asp中要简单很多了,我们核心就是直接获取当前页面然后判断每页多少再到数据库中利用limit就可以实现分页查询了,下面我来详细介绍分页类实现程序...2016-11-25
  • 浅析Promise的介绍及基本用法

    Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
  • c#各种Timer类的区别与用法介绍

    System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。在必须更新用户界面的情况下,建议不要使用该计时器,因为它的回调不在用户界面线程上发生...2020-06-25
  • C#学习笔记整理_浅谈Math类的方法

    下面小编就为大家带来一篇C#学习笔记整理_浅谈Math类的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#中实现任意List的全组合算法代码

    这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下...2020-06-25
  • 同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    这篇文章主要给大家介绍了关于同时兼容JS和C#的RSA加密解密算法,通过该算法可以对web提交的数据进行加密传输,文中通过图文及示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。...2020-06-25
  • Java匿名内部类的写法示例

    这篇文章主要给大家介绍了关于Java匿名内部类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-31
  • php无限分类使用concat如何实现

    一、数据库设计 -- -- Table structure for table `category` -- CREATE TABLE `category` ( `id` int(11) NOT NULL auto_increment, `catpath` varchar(255) default NULL, `name` varchar(255) default NULL...2015-11-08
  • 适用于初学者的简易PHP文件上传类

    本文实例讲述了PHP多文件上传类,分享给大家供大家参考。具体如下:<&#63;phpclass Test_Upload{ protected $_uploaded = array(); protected $_destination; protected $_max = 1024000; protected $_messages =...2015-10-30