php数组函数
增加元素 $arrayname[ ]
示例:
输出
Array ( [0] => phpfans [1] => php [2] => MySQL [3] => javascript [4] => html [css] => css ) |
删除元素 unset()
用unset()删除一个数组变量,即使是数字索引,此函数也不会重新对数组索引
示例:
输出:
Array ( [phpfans] => www.phpfans.net [mysql] => www.mysql.com [apache] => www.apache.org ) |
示例:
输出:
Array ( [0] => phpfans [2] => MySQL [3] => javascript ) |
索引保持不变
array_push()
array_push()函数将variable增加到target_array的末尾,成功时返回TRUE,否则返回FALSE.
这个和栈的入栈相似.可以为此函数传递多个变量作为输入参数,同时向数组压入多个变量(元素).
示例:
输出:
Array ( [0] => phpfans [1] => php [2] => MySQL [3] => javascript [4] => html [5] => css ) |
注: 如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担.
注: 如果第一个参数不是数组,array_push() 将发出一条警告.这和 $var[] 的行为不同,后者会新建一个数组.
array_unshift ( array &$array, mixed $var [, mixed $...] )
array_unshift() 将传入的单元插入到 array 数组的开头.注意单元是作为整体被插入的,因此传入单元将保持同样的顺序.所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变.函数的返回值是 array 数组新的单元数目.
示例:
输出:
新的数组的长度是:4 Array ( [0] => www.phpfans.net [1] => www.php.net [2] => www.mysql.com [3] => www.apache.org ) |
array_pop()
array_pop()函数返回target_array的最后一个元素(出栈),并在结束后重置数组的指针.
输出:
www.apache.org Array ( [phpfans] => www.phpfans.net [php] => www.php.net [mysql] => www.mysql.com ) |
array_shift ( array &$array )
array_shift() 将 array 的第一个单元移出并作为结果返回(出列),将 array 的长度减一并将所有其它单元向前移动一位.所有的数字键名将改为从零开始计数,文字键名将不变.如果 array 为空(或者不是数组),则返回 NULL.使用本函数后会重置数组指针.
示例: 数字键值
输出:
phpfans Array ( [0] => php [1] => MySQL [2] => javascript [3] => html [4] => css ) |
示例: 键值为字符串
输出:
www.phpfans.net Array ( [php] => www.php.net [mysql] => www.mysql.com [apache] => www.apache.org ) |
array array_pad ( array $input, int $pad_size, mixed $pad_value )
array_pad()函数会修改target数组,将其大小增加到length指定的长度.这是通过在数组中填充由pad_value指定的值实现的. 如果pad_value是正数,将填充到数组的右侧(后面);如果为负,则将填充到左侧(前面).如果length等于或小于当前大小,将不做任何操作. 示例如下:
这是手册中的例子
<?php
$input = array(12, 10, 9);
$result = array_pad($input, 5, 0);
// result is array(12, 10, 9, 0, 0)
$result = array_pad($input, -7, -1);
// result is array(-1, -1, -1, -1, 12, 10, 9)
$result = array_pad($input, 2, "noop");
// not padded
?>
IE和Firefox下的event
如果在使用javascript的时候涉及到event处理,就需要知道event在不同的浏览器中的差异,因为javascript的事件模型有三种,它们分别是NN4、IE4+和W3C/Safari;这也造成了在不同的浏览器中处理event的差异,这里结合一些零碎的代码来说明如何做到event在IE4+和Firefox下的正常工作。首先看如下代码:
var event = eventTag||window.event;
var currentKey = event.charCode||event.keyCode;
var eventSource =window.event.srcElement||eventTag.target;
}
这段代码主要是为了处理键盘事件的,在IE中event作为window对象的一个属性可以直接使用,但是在Firefox中却使用了W3C的模型,它是通过传参的方法来传播事件的,也就是说你需要为你的函数提供一个事件响应的接口,在上述函数中,
eventTag扮演的就是这个角色。
var event = eventTag||window.event;
这段代码可以根据浏览器的不同来得到正确的event,并在程序中使用,如果在IE4+下面使用这段代码,因为eventTag为null可以保证event = window.event,但是如果在Firefox下运行的话则因为手工的给定了eventTag所以var event = eventTag。根据对这一段代码的分析我们也不难看出可以对doEventThing方法进行如下的改造(因为javascript允许我们在定义function的时候不明确指出参数的数量):
{
var event = arguments[0]||window.event;
//other code
}
在Firefox下arguments[0]在特定的场合(没有显式的指定function参数数量的时候)被做为传播事件的参数来使用…………
至于var currentKey = event.charCode||event.keyCode;也是不同的浏览器所致,在IE4+下面记录键盘的是keyCode,但是在Firefox下的却是charCode,为此我们需要处理他们的差异。
还有一个差异就是事件源的获取:通过语句var eventSource = window.event.srcElement||eventTag.target;我们也看到了IE与W3C的不同。
经过上面的包装,我们基本上可以在IE4+和Firefox下面顺利的使用事件机制了,当然如果为了通用性可以对这种差异进封装来形成自己的Event对象在程序中误差别的使用事件对象,这里就不在介绍了。
接下来分析事件的绑定:大概分为如下5种
1、绑定到元素,这也是比较常见的一种比如:
这样我们就把doEventThing绑定到了该button对象上,点击此按钮事件就被触发。
2、绑定事件到对象:这也是比较常见的一种,特别是在IE4+下面:
document.getElementById("divid").onclick = doEventThing;
3、使用<script for="">进行事件的绑定,这只在IE4+下有用(为buttong1绑定事件,逻辑在script块中书写event来指定怎么触发事件):
<script for="button1" event="onclick">
// script statements here
</script>
4、使用 IE5/Windows 的 attachEvent() 方法
5、使用 W3C DOM 的 addEventListener() 方法
addEventListener("eventType",listenerReference,captureFlag);
第三个参数则是一个 Boolean 值,指明该结点是否以DOM中所谓的捕捉模式来侦听事件。对于一个典型的事件侦听器来说,第三个参数应该为false(假)。
prototype在绑定事件的时候兼容IE和W3C的时候做的处理如下:
if (!this.observers) this.observers = [];
if (element.addEventListener) {//W3C DOM
this.observers.push([element, name, observer, useCapture]);
element.addEventListener(name, observer, useCapture);
} else if (element.attachEvent) {//IE5/Windows
this.observers.push([element, name, observer, useCapture]);
element.attachEvent('on' + name, observer);
}
}
php 字符串字节数
PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是1~3倍的差异了。
采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,’UTF-8′)。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到,设置有两种方式:
1. 在php.ini中设置mbstring.internal_encoding = UTF-8
2. 调用mb_internal_encoding(”GBK”)
除了mb_strlen,还有很多切割函数,其中mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。而且从函数切割对长度的作用也不同,mb_strcut的切割条件是小于strlen, mb_substr是等于strlen,看下面的例子,
$str = '我是一串比较长的中文-www.jefflei.com'; echo "mb_substr:" . mb_substr($str, 0, 6, 'utf-8'); echo "
"; echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8'); ?>
输出如下:
mb_substr:我是一串比较
mb_strcut:我是
需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php编译模块时加入mbstring的支持:
(1)编译时使用–enable-mbstring
(2)修改/usr/local/lib/php.inc
default_charset = “zh-cn”
mbstring.language = zh-cn
mbstring.internal_encoding =zh-cn
mbstring类库内容比较多,还包括mb_ send_ mail 之类的email处理函数等
庆祝我的博客开版
今天突然心血来潮想开个博客,就到网上搜了一下,找到这个博客了。
上班中,不能太过分了,O(∩_∩)O哈哈~
js关闭浏览器事件
window.onunload = onunload_handler;
function onbeforeunload_handler(){
var warning="确认退出?";
return warning;
}
function onunload_handler(){
var warning="谢谢光临";
alert(warning);
}
预览本地图片的js脚本
//本脚本需要prototype 支持
if(Prototype.Browser.IE){
$('imgLogo').src = "file://"+ el.value;
}
else{
$("imgLogo").src = el.files[0].getAsDataURL();
}
}