0%

同样的数据从服务器取得并解码后(json数据),在js端呈现两种不同的结果,一为数组,一为对象,暂且不讨论问题的原因(待解决),这里讨论解决办法。

开始以为只会遍历数组,没考虑到会遍历对象,所以用了 for(对象无length属性所以失败)。

forEach 只能用于数组,不能用于对象;
for 需要长度作为循环终止条件,对象没有length属性,也不考虑;
for in 可以同时遍历数组和对象,符合条件;

1
2
3
4
var searches = {state:1,page:2};
for (var key in params) {
searches[key] = params[key];
}

Object.keys() 先把对象或属性取出来得到数组a,然后遍历a,相当于在遍历数组和对象,也符合条件;

阅读全文 »

思路:将 array (key => array) 转换为 array (key => array中的待排序字段),降维为一维数组排序,然后将一维数组的value替换为原始数组对应key的value。

二维数组排序的时间复杂度等同一维数组排序的时间复杂度。同理推测,n维数组排序的时间复杂度等同一维数组排序的时间复杂度。


需求描述:
有一个 4*4 的方格,用户可以选择起点和落点形成矩形,每次形成的矩形不能重叠,起点可以和落点坐标一样。现已知起点、未选点集合和已选点集合,求落点的集合。

算法重点:转换为判断点P是否在一个矩形内。


###方法一:建立平面直角坐标系,根据横坐标和纵坐标判断点是否在矩形内。

1
2
3
4
5
6
7
8
9
10
11
12
13
14

/**
* 判断点是否在矩形内(含边)。p1、p2是矩形的两个对角点。
* 该算法和平面直角坐标系怎么建立无关
* @param $rc
* @param $p
* @return bool
*/
function isInRect($rc, $p)
{
$xi = ($p->x - $rc->p1->x) * ($p->x - $rc->p2->x);
$yi = ($p->y - $rc->p1->y) * ($p->y - $rc->p2->y);
return ($xi <= 0) && ($yi <= 0);
}
阅读全文 »

使用 register_shutdown_function 捕获代码异常的时候,语法错误是无法捕获的,本着及时预防、发现错误的原则,利用 svn 的 hooks 对提交的代码进行语法检查很有必要。

svn常见的钩子有:

post-commit:文件提交之后执行
post-lock:文件加锁之后执行
post-revprop-change:revision 属性修改之后执行
post-unlock:文件解锁之后执行
pre-commit:文件提交之前执行
pre-lock:文件加锁之前执行
pre-revprop-change:revision 属性修改之前执行
pre-unlock:文件解锁之前执行
start-commit:未建立 Subversion transaction 之前执行

这里使用 pre-commit 这个钩子。

PS:这里遇到一个问题就是不知道svn安装在哪里的。。。最后求助于命令 whereis svn. Yeah! [更多linux命令][1]

阅读全文 »

composer作为一款PHP的包管理器,类似于Java中的maven。当我们用composer把需要使用的包下载下来后,借助__autoload() 我们就能直接在项目中使用第三方库了。

composer提供了四种自动加载机制:

  • classmap:
  • psr-0:
  • psr-4:
  • files:

__autoload()

了解 spl_autoload_register() 前先了解一下 __autoload(),或者直接 跳过此节

1
2
3
4
5
function __autoload($c)
{
var_dump($c);
}
new Say();
1
2
3
//输出
string(3) "Say"
Fatal error: Class 'Say' not found in E:\Dropbox\liubole\htdocs\test\index.php on line xx

当Say类不存在的时候,自动执行了 __autoload() 函数,并将类名当做参数传入了 __autoload()。

阅读全文 »

use HuNanZai\Component\Log\Service as Logger;
use Api\ShopCom\Model\UncheckLog;
use Api\ShopCom\Model\CheckedLog;
use Api\ShopCom\Model\CheckProof;
use Api\ShopCom\Model\PayLog;

use HuNanZai\Component\Log\Service as Logger;
去HuNanZai\Component\Log\Service看源码。涉及到composer。

composer:提供依赖管理+自动加载功能。
phpstorm是否支持composer:支持,在windows上安装composer,进入composer.json所在目录,运行composer install -vvv
composer.json:

composer中的autoload:自动加载,基于spl_autoload_register() 函数