• [PHP源码阅读]strpos、strstr和stripos、stristr函数

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    strpos

    mixed strpos ( string $haystack, mixed $needle [, int $offset = 0 ] )
    

    如果offset指定了,查找会从offset的位置开始。offset不能为负数。

    返回needle第一次出现在haystack的位置。如果在haystack中找不到needle,则返回FALSE。

    needle,如果needle不是字符串,它会被转换成整型数值并赋值为该数值的ASCII字符。请看下面例子。

    例子

    $str = "hello";
    $pos = strpos($str, 111);
    // 111的ASCII值是o,因此$pos = 4
    

    Read more...
  • [搜索引擎]搜索引擎索引数据结构和算法

    最近一直在研究sphinx的工作机制,在[搜索引擎]Sphinx的介绍和原理探索简单地介绍了其工作原理之后,还有很多问题没有弄懂,比如底层的数据结构和算法,于是更进一步地从数据结构层面了解其工作原理。在网上搜了很多资料,发现没有很多介绍这方面的文章,后来找到了一本书,《这就是搜索引擎》,拜读了本书的第三章,介绍了主流搜索引擎用的数据结构及其工作原理,sphinx使用的数据结构也是一样的,用的也是倒排索引。

    注:本文不会对sphinx和搜索引擎严格区分开,同一作搜索引擎看待。

    先附图一枚: 搜索引擎索引

    Read more...
  • [井字游戏]做一款回忆童年的游戏

    99% of information we read, we forget anyway. The best way to remember is to “DO”.

    体验地址:http://www.hoohack.me/assets/tictactoe/

    游戏完整的代码在我的 github 上,有兴趣也可以围观一下:TicTacToe,也希望大家可以点个 star。

    缘起

    最近在FreeCodeCamp上面学习前端知识,不知不觉已经学到了319课,现在遇到的一个小project是做一款井字游戏。说起井字游戏,真是满满的童年味道,还记得最疯狂的时候是小时候跟同桌拿着一张草稿纸就能玩一节课,回到家跟弟弟也能继续玩,对于没有太多娱乐节目的童年来说,真是一款玩不厌的小游戏。这款游戏代码比较简单,主要是掌握算法的原理,但是也有一些需要注意的地方,于是想把自己遇到的问题记录下来。

    游戏界面

    进入正题。项目的效果图如下:

    Read more...
  • [PDO绑定参数]使用PHP的PDO扩展进行批量更新操作

    最近有一个批量更新数据库表中某几个字段的需求,在做这个需求的时候,使用了PDO做参数绑定,其中遇到了一个坑。

    方案选择

    笔者已知的做批量更新有以下几种方案:

    1、逐条更新

    这种是最简单的方案,但无疑也是效率最低的方案。

    2、CASE WHEN

    类似如下的语句

    UPDATE tbl_test SET val = CASE id WHEN 1 THEN 2 WHEN 2 THEN 3 END WHERE id IN(1, 2); PDO绑定参数
    

    为了防止SQL注入,使用了PDO扩展绑定参数。上面的数字在一般情况下是变量,那么就需要做参数绑定。刚开始是想着在IN的时候将id组成的字符串作为变量绑定过去,第一次实现的代码如下:

    Read more...
  • [搜索引擎]Sphinx的介绍和原理探索

    What/Sphinx是什么

    定义:Sphinx是一个全文检索引擎。

    特性:

    • 索引和性能优异
    • 易于集成SQL和XML数据源,并可使用SphinxAPI、SphinxQL或者SphinxSE搜索接口
    • 易于通过分布式搜索进行扩展
    • 高速的索引建立(在当代CPU上,峰值性能可达到10 ~ 15MB/秒)
    • 高性能的搜索 (在1.2G文本,100万条文档上进行搜索,支持高达每秒150~250次查询)

    Why/为什么使用Sphinx

    遇到的使用场景

    遇到一个类似这样的需求:用户可以通过文章标题和文章搜索到一片文章的内容,而文章的标题和文章的内容分别保存在不同的库,而且是跨机房的。

    Read more...
  • FreeCodeCamp学习知识点汇总

    这段时间在FreeCodeCamp这个平台上学习前端知识,上面的练习题都很不错,推荐大家去学习。学习了一段时间,记录下了一些知识点,在这里总结分享。

    arguments数组

    当需要使用arguments数组时,最好的方法就是转换成一个新数组。

    var args = Array.prototype.slice.call(arguments);
    

    修改字符串中的字符

    Read more...
  • 【读书笔记】代码整洁之道

    第一章 整洁代码

    赶上期限的唯一方法:始终尽可能保持代码整洁。

    整洁的代码只做好一件事。

    整本书的主旨,不要重复代码,只做一件事,表达力,小规模抽象。

    要想干得快,要想快点做完,要想轻松写代码,先让代码易读吧。

    让每次签入时,代码都比签出时干净。

    Read more...
  • 在OpenSUSE上编译安装sphinx扩展

    准备工作

    要在PHP中安装sphinx扩展,你必须先安装好sphinx,笔者使用的是中文分词,因此我安装的是coreseek。

    如何安装coreseek请看:http://www.coreseek.cn/products-install/install_on_bsd_linux/

    安装过程

    安装过程:

    1、安装libsphinclient

    Read more...
  • 【性能为王】从PHP源码剖析array_keys和array_unique

    之前在[译]更快的方式实现PHP数组去重这篇文章里讨论了使用array_flip后再调用array_keys函数替换直接调用array_unique函数实现数组去重性能较好。由于原文没有给出源码分析和测试的结果,导致给读者造成迷惑,在此说声抱歉。为了解开读者的疑惑,笔者承诺了会补上源码的分析,于是花了一些时间去研究PHP的源码,现在此补上详细的说明。

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    Read more...
  • [PHP源码阅读笔记]strlen函数

    我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

    strlen函数说明。

    int strlen ( string $string )
    

    这篇文章,我们可以知道strlen函数是通过Zend Engine定义的。函数的定义可以在这里查看。

    在这里也给出函数的源码:

    Read more...