php数组函数

增加元素 $arrayname[ ]
示例:

 

<?php
$arr = array('phpfans','php','MySQL','javascript');
$arr[] = 'html';//增加一个元素插到最后
$arr['css'] = 'css';//再增加一个元素插到最后
print_r($arr);
?>

 

 

输出

Array
(
    [0] => phpfans
    [1] => php
    [2] => MySQL
    [3] => javascript
    [4] => html
    [css] => css
)

删除元素 unset()

 

用unset()删除一个数组变量,即使是数字索引,此函数也不会重新对数组索引

 

示例:

 

<?php 
$arr 
= array(
   
'phpfans' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);

unset(
$arr['php']);
print_r($arr);
?> 

 

输出:

Array
(
    [phpfans] => www.phpfans.net
    [mysql] => www.mysql.com
    [apache] => www.apache.org
)

示例:

 

<?php 
$arr 
= array('phpfans','php','MySQL','javascript');

unset(
$arr[1]);
print_r($arr);
?> 

 

输出:

Array
(
    [0] => phpfans
    [2] => MySQL
    [3] => javascript
)

索引保持不变

 

array_push()

 

array_push()函数将variable增加到target_array的末尾,成功时返回TRUE,否则返回FALSE.

 

这个和栈的入栈相似.可以为此函数传递多个变量作为输入参数,同时向数组压入多个变量(元素).

 

示例:

 

<?php 
$arr 
= array('phpfans','php','MySQL','javascript');
array_push($arr,'html','css');
print_r($arr);
?> 

 

输出:

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 数组新的单元数目.

 

示例:

 

<?php
//PHPfans站系列教程:
//http://www.phpfans.net/bbs/forumdisplay.php?fid=25
$arr = array(
   
=> 'www.php.net',
   
=> 'www.mysql.com',
   
=> 'www.apache.org'
);
$phpfans 'www.phpfans.net';
$num array_unshift($arr,$phpfans);
echo 
"新的数组的长度是:".$num;
echo 
"\r\n\r\n";
print_r($arr);
?> 

 

输出:

新的数组的长度是:4

Array
(
    [0] => www.phpfans.net
    [1] => www.php.net
    [2] => www.mysql.com
    [3] => www.apache.org
)

array_pop()

 

array_pop()函数返回target_array的最后一个元素(出栈),并在结束后重置数组的指针.

 

<?php 
$arr 
= array(
   
'phpfans' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);

echo 
array_pop($arr);
echo 
"\n\n";
print_r($arr);
?> 

 

输出:

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.使用本函数后会重置数组指针.

 

示例: 数字键值

 

<?php 
//PHPfans站系列教程:
//http://www.phpfans.net/bbs/forumdisplay.php?fid=25
$arr = array('phpfans','php','MySQL','javascript','html','css');
echo 
array_shift($arr);
echo 
"\n\n";
print_r($arr);
?> 

 

输出:

phpfans

Array
(
    [0] => php
    [1] => MySQL
    [2] => javascript
    [3] => html
    [4] => css
)

示例: 键值为字符串

 

<?php 
$arr 
= array(
   
'phpfans' => 'www.phpfans.net',
   
'php' => 'www.php.net',
   
'mysql' => 'www.mysql.com',
   
'apache' => 'www.apache.org'
);
echo 
array_shift($arr);
echo 
"\r\n\r\n";
print_r($arr);
?> 

 

输出:

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(12109);

$result array_pad($input50);
// 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($input2"noop");
// not padded
?>

 

IE和Firefox下的event

如果在使用javascript的时候涉及到event处理,就需要知道event在不同的浏览器中的差异,因为javascript的事件模型有三种,它们分别是NN4、IE4+和W3C/Safari;这也造成了在不同的浏览器中处理event的差异,这里结合一些零碎的代码来说明如何做到event在IE4+和Firefox下的正常工作。首先看如下代码:

       

function doEventThing(eventTag){    
                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的时候不明确指出参数的数量):

function doEventThing()
{     
    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、绑定到元素,这也是比较常见的一种比如:

<input type="button" onclick="doEventThing(event)"> 

        这样我们就把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的时候做的处理如下:

 

_observeAndCache: function(element, name, observer, useCapture) {   

   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);   
   }   


 

 

 

撇 开this.observers.pust([element,name,observer,useCapture])不谈,我们对4、5所说的事件绑定 就很清楚了。我们知道prototype的此方法的useCapture在IE下没有作用,只对W3C的事件处理机制起作用。

 

php 字符串字节数

内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是1~3倍的差异了。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,’UTF-8′)。如果省略第二个参数,则会使用的内部编码。内部编码可以通过mb_internal_encoding()函数得到,设置有两种方式:
1. 在.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'); ?&gt;

输出如下:

mb_substr:我是一串比较
mb_strcut:我是

需要注意的是,mb_strlen并不是核心函数,使用前需要确保在编译模块时加入mbstring的支持:
(1)编译时使用–enable-mbstring
(2)修改/usr/local/lib/.inc
default_charset = “zh-cn”
mbstring.language = zh-cn
mbstring.internal_encoding =zh-cn

mbstring类库内容比较多,还包括mb_ send_ mail 之类的email处理函数等

庆祝我的博客开版

今天突然心血来潮想开个博客,就到网上搜了一下,找到这个博客了。

上班中,不能太过分了,O(∩_∩)O哈哈~

js关闭浏览器事件

 

window.onbeforeunload = onbeforeunload_handler;   
    window.onunload = onunload_handler;   
    function onbeforeunload_handler(){   
        var warning="确认退出?";           
        return warning;   
    }   
       
    function onunload_handler(){   
        var warning="谢谢光临";   
        alert(warning);   
    }

 

 

预览本地图片的js脚本

//本脚本需要prototype 支持

 

function show(el){

if(Prototype.Browser.IE){
                $('imgLogo').src = "file://"+ el.value;
            }
            else{
                $("imgLogo").src = el.files[0].getAsDataURL();
            }

}