插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。
算法描述:
$arr =array(123,0,5,-1,4,15);
function insertSort(&$arr){
//先默认第一个下标为0的数是排好的数
for($i=1;$i<count($arr);$i++){
//确定插入比较的数
$insertVal=$arr[$i];
//确定与前面比较的数比较
$insertIndex=$i-1;
//表示没有找到位置
while($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
//把数后移
$arr[$insertIndex+1]=$arr[$insertIndex];
$insertIndex--;
}
//插入(给$insertval找到位置了)
$arr[$insertIndex+1] = $insertVal;
}
}
insertSort($arr);
print_r($arr);
?>
本文链接
学习php目前是第二天,就是喜欢深入研究这些小细节的秘密。
分别用php 5.2.5和 php 5.4.3测试
class Person{
function show(){
var_dump($this);
echo "hello,world";
}
function __call($name, $args){
echo "call yes";
}
function __callStatic($name, $args){
echo "callStatic yes";
}
}
Person::show();
?>
1.这里类调用了实例方法,而且还正确的调用到了实例方法,因为没有进入__calll和__callstatic
2.无错误
按照php的一些书籍资料的说明,应该是类能调用的方法只有类方法,而不是类的实例方法,也就是类只能调用静态方法(static method),但是这里类居然调用了实例方法,百思不得其解。找了一些相关资料,如下:
引用:
-----------------------------------------------------------------
在php文件的任何位置都可以使用 classname::methodname()来直接调用类里面公用的方法。个人觉得出现这个情况是因为
内存的堆区保存的对象仅保存的是对象的属性,对象的方法任然存放在代码区,为类的成员方法,如果使用对象来调用的类的成员方法里面不含$this的话,此时这个方法和静态数据区存放的静态方法并无明显区别。即此时对象的成员方法与该对象的静态方法并无明显区别
都并不随着调用对象的不同,而发生不同的变化。
并且成员方法本身就是在类中定义的,就是老爸和儿子的关系,区别就是一个是自己老婆生的(静态方法),另外一个是和别人老婆生的(成员方法),别人老婆生的那个儿子就管其他人叫老爸了。某一天那个私生的儿子了解情况了(无$this)。便会叫两人叫爸了。
此时便可以使用classname::methodname()
url:http://segmentfault.com/q/1010000000158671
-----------------------------------------------------------------
然后用5.4.3测试果断告警,如下:
addcslashes(string $str,string $charlist);
echo addcslashes('foo[ ]','A..z');
//输出:\f\o\o\[ \]
//将字符串foo[ ] ascii码在A-z之间的所有字符 全部转义
//注意: A-z 不能写成z-A ascii码 必须 从小到大
//echo addcslashes('foo['.']','z..A');
// 输出:\zoo['\.']
//去除字符串中的反斜线
stripcslashes
$STR = <<<EOF
\\\\
EOF;
echo $STR;
//
echo stripcslashes($STR);
/ 四个转义字符转移为1个/
本文链接