2010年2月9日

1,数组的定义和初始化
什么是数组?数组是一种编程结构,它是一个存储一组或一系列数值的变量。
比如人口普查时对个人的身份登记,如姓名、性别、民族、出生等就可作为数组。
PHP中创建数组使用array()结构来定义,比如:

$people=array('name','sex','nation','brith');

而如何显示数组中的各元素的值,我们则是使用从0开始的索引,索引号在变量名称后的方括号中,比如:

<?php
$people=array('name','sex','nation','birth');
echo $people[2];
?>

输出的$people[2]就是显示的是nation(索引第一项从0计数)。
PHP除了支持数字索引数组以外,还支持相关数组。所谓相关数组,就是可自定义关键字来替换不直观的数字索引,比如:

<?php
$peoples=array('xm'=>'name','xb'=>'sex','mz'=>'nation','cs'=>'birth');
echo $peoples['cs'];
?>

使用相关数组使得输出的选择很直观(不需要预先计算索引号然后输出),定义的关键字和值之间使用“=>”符号定义。
根据PHP数组元素的两种显示方式,还可以如变量一样无需array()声明和初始化,直接自动创建数字。比如

$people[0]='name';
$people[1]='sex';
$people[2]='nation';
$people[3]='brith';

或者

$peoples['xm']='name';
$peoples['xb']='sex';
$peoples['mz']='nation';
$peoples['cs']='birth';

该数组的大小根据所增加元素的多少动态的变化。
2,数组元素的显示
在如上使用的无论$people[2]也好,无论$peoples['cs']也好,都只是输出已知的明确位置的数组元素值,如何快速输出所有或部分的数组元素,使用循环语句无疑是最快的方法。

<?php
$people=array('name','sex','nation','birth');
for ($i=0;$i<4;$i++)
    echo "$people[$i] ";
?>

除了使用了解循环次数的for循环以外,还可以使用对循环次数无须要求的foreach语句。

<?php
$people=array('name','sex','nation','birth');
foreach($people as $xiangmu)
    echo $xiangmu;
?>

$xiangmu变量将保存数组中的各元素值,依次显示出来。当然,为了输出的数据能间隔区分,可在数组元素之后输出空格:
echo $xiangmu." ";
注:英文句号(.)可将字符串连接合并成新的字符串,参见亲密接触PHP之变量、常量学习笔记

posted @ 2010-02-09 16:17 杳杳 阅读(647) | 评论 (0)编辑 收藏
 

1. 年-月-日

echo date(‘Y-m-j’);

2010-02-6

echo date(‘y-n-j’);

10-2-6

大写Y表示年四位数字,而小写y表示年的两位数字;

小写m表示月份的数字(带前导),而小写的n则表示不带前导的月份数字。

echo date(‘Y-M-j‘);

2010-Feb-6

echo date(‘Y-m-d’);

2010-02-06

大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);

没有大写的J,只有小写j表示月份的日期,无前导0;

若要日份带前导则使用小写d。

echo date(‘Y-M-j’);

2010-Feb-6

echo date(‘Y-F-jS’);

2010-February-6th

大写M表示月份的三个缩写字符,而大写F表示月份的英文全写。(没有小写f)

大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。

小结:

表示年可以用大写的Y和小写的y;

表示月可以用大写的F、大写M、小写m和小写n(分别表示字符和数字的两种方式);

表示日可以用小写d和小写j,大写S表示日期的后缀。

2. 时:分:秒

默认情况下,PHP解释显示的时间为“格林尼治时间”,与我们本地的时间相差8个小时。

echo date(‘g:i:s a’);

3:16:50 am

echo date(‘h:i:s A’);

03:16:50 AM

小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。

当使用12小时制度时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。

echo date(‘G:i:s’);

23:22:56

大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数。

小结:

字母g表示小时不带前导,字母h表示小时带前导;

小写g、h表示12小时制,大写G、H表示24小时制。

3. 闰年、星期、天

echo date(‘L’);

今天是否闰年:0

echo date(‘I’);

今天是:Tuesday

echo date(‘D’);;

今天是:Tue

小写L表示判断今年是否是闰年,布尔值,为真返回1,否则为0;

小写I表示当天是星期几的英文全拼(Tuesday);

而使用大写D表示星期几的3个字符串缩写(Tue)。

echo date(‘w’);

今天星期:2

echo date(‘W’);

本周是全年的第06周

小写w表示星期几,数字形式显示

大写W表示一年中的星期数

echo date(‘t’);

本月是28天

echo date(‘z’);

今天是今年的第36天

小写t表示当前月份有多少天

小写z表示今天是本年中的第几天

4. 其它

echo date(‘T’)

UTC

大写T表示服务器的当前区域设置;

echo date(‘I’);

0

大写I表示判断当前是否为夏令时,为真返回1,否则为0

echo date(‘U’);

1170769424

大写U表示从1970年1月1日到现在的总秒数,就是Unix时间纪元的UNIX时间戳。

echo date(‘c’);

2010-02-06T14:24:43+00:00

小写c表示ISO8601日期,日期格式为YYYY-MM-DD,用字母T来间隔日期和时间,时间格式为HH:MM:SS,时区使用格林尼治标准时间(GMT)的偏差来表示。

echo date(‘r’);

Tue,06 Feb 2010 14:25:52+0000

小写r表示RFC822日期

a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
D - 星期几,三个英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"
i - 分钟; 如: "00" 至 "59"
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"
M - 月份,三个英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序数,二个英文字母; 如: "th","nd"
t - 指定月份的天数; 如: "28" 至 "31"
U - 总秒数
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"

posted @ 2010-02-09 16:16 杳杳 阅读(765) | 评论 (0)编辑 收藏
 

一、引号定义字符串
  在PHP中,通常一个字符串被定义在一对引号中,如:
'I am a string in single quotes'
"I am a string in double quotes"
PHP语法分析器是用成对的引号来判断一个字符串的。因此,所有字符串必须使用同一种单或者双
引号来定义开始和结束。例如,下面的字串定义是不合法的:
"I am not a valid string since I have unmatching quote marks'
'Me neither!"
  定义字符串时,只有一种引号被视为定义符,即单引号或双引号。于是,如果一个字符串由双引
号开始,那么只有双引号被分析器解析。这样,你就可以在双引号串中包含任何其他字符,甚至单引
号。下面的引号串都是合法的:
$s = "I am a 'single quote string' inside a double quote string";
$s = 'I am a "double quote string" inside a single quote string';
  当PHP遇到与串的开头相对应的引号时,便认为已经到了字符串尾部,于是:
"Why doesn't "this" work?"
  实际上被PHP语法分析器分成三个部分:
"Why doesn't "——包含一个单引号的双引号串
this——多余的字符,分析器无法处理
" work?" ——普通字符串
  上面的这个例子企图在双引号串中包含双引号,而分析器在遇到第二个双引号时便认为字符串结
束了。要达到包含引号的目的,必须分析器在遇到串内普通引号的时候忽略它的原意,我们在引号的
前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:
"Why doesn't \"that\" work?"
  在英文字符串中一个常见的问题是撇号'的使用,因为它就是一个单引号,而在英文串中十分常见
(英文所有格)。你必须小心处理这些字符:
'You\'d better escape your apostrophes'
  可以看到反斜杠在字符串中有他的特殊含义,当我们需要在字符串中包含反斜杠本身时,需要在
该符号前面多加一个反斜杠。例如:
$file = "c:\windows\system.ini";
echo $file; // 打印结果为: c:windowssystem.ini
$file = "c:\\windows\\system.ini";
echo $file; // 打印结果为: c:\windows\system.ini
  另一种字符串定义方式,能够消除特殊字符的烦恼,而且便于引用较长的文本。该字符串定义方
法以<<<符号紧跟一个自定义字符串开头,最后一行以该自定义字符串结束,并且必须顶格。
二、字串的连接
  字串可以使用字串连接符(.)来连接,如:
$first_name = 'Charlie';
$last_name = 'Brown';
$full_name = $first_name . ' ' . $last_name;
  常见的用途是建立大块的HTML字串代码,赋值号 (=) 连接符 (.) 可以被简写合并为 (.=) 符
号,如:
$html = '<table>';
$html .= '<tr><td>number</td><td>square</td></tr>';
for ( $i=0 ; $i<10 ; $i++) {
$square = $i * $i;
$html .= '<tr><td>' . $i . '</td><td>' . $square . '</td></tr>';
}
$html .= '</table>';
三、在字串中使用变量
  这个功能让你无须使用连接符号来粘和大量的简单字符串。PHP允许我们在双引号串中直接包含字
串变量,我们可以发现下面的两个字串的处理结果是相同的。
$full_name = $first_name . ' ' . $last_name;
$full_name = "$first_name $last_name";
  单引号串和双引号串在PHP中的处理是不相同的。双引号串中的内容可以被解释而且替换,而单引
号串中的内容总被认为是普通字符。例如:
$foo = 2;
echo "foo is $foo"; // 打印结果: foo is 2
echo 'foo is $foo'; // 打印结果: foo is $foo
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行)
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n
  正如你所看到的,在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\\和插入单
引号\')。所以,当你想在字串中进行变量代换和包含\n(换行符)等转义序列时,你应该使用双引
号。单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对
单引号串的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速
度略慢。
  在字符串中引用复杂的变量组合时,可能会产生一些问题,下面的代码会正常工作:
echo "value = $foo";
echo "value = $a[$i]";
  而下面的代码却不能得到我们希望的结果:
echo "value = $a[$i][$j]"; //我们希望打印二维数组$a的某个元素。
  为避免这些字串使用中的潜在问题,我们通常把复杂的变量从字串中分离开来,就像这样:
echo 'value = ' . $a[$i][$j];
  还有一种办法是将复杂变量用花括号括起来,语法分析器就能正确辨认了:
echo "value = {$a[$i][$j]}" //打印二维数组$a的某个元素
  这样,又出现新问题了。当我们想在字串中引用花括号字符本身时,就要记得使用转义符了:
$var = 3;
echo "value = {$var}"; // 打印结果 "value = 3"
echo "value = \{$var}"; // 打印结果 "value = {3}"
三、斜杠和SQL语句
  生成HTML代码或SQL查询语句是编写PHP程序时经常遇到而且是件有趣的事情。为什么这么说呢,
因为这涉及到生成另外一种类型的代码,你必须仔细地考虑和遵循这种代码所要求的编写语法和规
则。
  我们来看这样一个例子,假如你想查询数据库中名字是“O'Keefe”的用户,通常SQL语句的形式
是这样的:
select * from users where last_name = 'O\'Keefe'
  请注意SQL语句这个英文所有格(撇号)需使用反斜杠转义。PHP专门提供了一些函数来处理这样
的情况,函数AddSlashes($str)的用途就是自动在字串中对引号字符插入反斜杠转义符:
$last_name = "O'Keefe";
$sql = "select * from users where last_name = '" . addslashes($last_name) . "'";
  在这个例子中,你还要在last_name字串外面括上单引号(SQL语法要求),由于这里使用的是双
引号串,所以对这对单引号就无须使用转义了。下面的这个语句是使用单引号串的等价形式:
$sql = 'select * from users where last_name = \'' . addslashes($last_name) . '\'';
  任何时候你要在数据库中写入字串,你都必须确保里面的引号正确使用了转义符号,这是很多PHP
初学者常犯的错误。
四、双引号和HTML
  与SQL语句不同,在标准HTML语言中双引号常被用来表示字串(现在很多浏览器具备较强的容错功
能,允许在HTML中用单引号甚至不用引号表示字符串),例如:
$html = '<a href="'.$url.'">'.$link.'</a>';
$html = "<a href=\"$url\">$link</a>";
HTML语言不支持反斜杠转义,这一点在我们使用表单的hidden inputs来传输数据的时候就会有所
体会了。设置hidden inputs的值的最好办法,是使用htmlspecialchars()函数来编码。下面的语句可
以正常传输一个可能包含双引号的数据:
<input type=hidden name=var value="<?php echo htmlspecialchars($var) ?>">

一、引号定义字符串。要达到包含引号的目的, 必须分析器在遇到串内普通引号的时候忽略它的原意,我们在引号的 前面加上一个反斜杠来告诉PHP:这个引号是字符串的一部分,正确的表示方法是这样:单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对 单引号串的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速 度略慢。

这个...双引号转义,单引号不转义
:/r/n是换行,但是如果你用单引号写入文件,不会是换行,而是一个字符,如果用双引号写入文件,就是换行.
同意。

posted @ 2010-02-09 16:15 杳杳 阅读(867) | 评论 (0)编辑 收藏
 

PHP和Html最简单的交互是通过print和echo语句来实现的,在世纪使用中,print和echo两者的功能几乎是完全一样的。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是有一个非常重要的区别:在echo函数中,可以同时输出几个字符串,而在print函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。

echo和print都不是函数,而是语言结构,所以圆括号都不是必须的。它们的区别在于:

(1) echo可以输出多个字符串,像下面这样:
echo ‘a’,’b’,’c’;
如果你非要加上圆括号,主义写成echo(‘a’,’b’,’c’);是错误的,应该写成:

echo(‘a’),(‘b’)(‘c’)

它没有像函数的行为,所以不能用于函数的上下文。

(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:

$ret=print ‘Hello World’;

所有它能用在更复杂的表达式中。
另外,echo的效率相对比较快

如下代码:

<?php

$a=’hello’;

$=’php world’;

echo $a,$b.’<br>’; //echo 可以用逗号分隔字符串变量来显示

print $a.$b.’<br>’; //而print不能使用逗号,只能使用点号分隔

print $a,$b.’<br>’; //使用逗号时会报错

?>

echo命名和print命令相同,没有区别

echo函数和print函数有区别

echo() 无返回值,与echo命令相同

print() 有返回值,成功,返回1,false,返回0

posted @ 2010-02-09 16:14 杳杳 阅读(661) | 评论 (0)编辑 收藏
仅列出标题