Php | 脚本学习

php撰写的日志

PHP 中文乱码的常见解决方法总结

    本文介绍了PHP中文乱码的常见解决方法。要解决PHP中文乱码最好最快的解决办法就是,页面申明的编码与数据库内部编码一致。
    PHP中文乱码是PHP开发中的常见问题之一。PHP中文乱码有时发生在网页本身,有些产生在于MySQL交互的过程中,有时与操作系统有关。下面进行一番总结。

    一.首先是PHP网页的编码

    1. php文件本身的编码与网页的编码应匹配

    a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312″),静态页面添加<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。
    More >

PHP 换行符转成<br/>: nl2br()函数

nl2br()函数可将字符串\n中的换行符转成HTML的换行符号<br/>。
常用于在程序处理完字符串后将结果输出到网页中。
由于HTML中不识别程序语言中常用的\n, 所以得用nl2br()进行替换。

<?php
$str = "Hello world\n See you later";

echo $str."<br/>";
echo nl2br($str);
?>

输出结果为:

Hello world See you later
Hello world
See you later

PHP 字符串去除空格函数trim

trim(), ltrim(), rtrim()

在PHP获取表单的信息时,我们通常会对表单中的字符串进行处理,其中最基本的处理就是去除字符串两边的空格。
下面将介绍trim()系统函数的语法和使用:

string trim(string $str [, string $charlist])

trim()函数对输入的字符串进行去除开始位置和结束位置的空格(其实不只是空格)。
如果不设置第二个参数,trim()函数将会去除以下字符:
” ” : 空格;
“\t”: 制表符;
“\n”: 换行符;
“\r”: 回车符;
“\0″: 空字符;
“\x0B”: 垂直制表符;

如果设置第二个参数,trim()函数将只去除第二个参数中的字符集,而不会再去除上面默认的字符集。

<?php
$str = "  hello world   ";
$str_trim = trim($str);
echo "$str<br />$str_trim";
?>

看一下输出结果:

hello world
hello world

怎么是一样的呢?第一行的空格怎么不见了。呵呵。我们在看一下网页的HTML代码吧:

  hello world   hello world

空格出现了吧!空格不见是因为浏览器显示时自动进行不显示多除的空格。

<?php
$str = "Left hello world Right ";
$str_trim = trim($str,"eftL");
echo "$str<br />$str_trim";
?>

输出结果为:

Left hello world Right
hello world Right

我们将左则和eftL字符相关的都去除了,你可能注意到了,右侧的Right中的”t”也在第二个参数中,为什么没去除。仔细看一下$str最后一个字符,其实是空格。因为空格(最右侧)没有去除(在HTML中能看见),所以”t”(右侧倒数第二)将不会处理。这同时说明函数第二个参数会覆盖trim()的默认字符集。

最后说一下ltrim()和rtrim()函数:
ltrim()函数只处理字符串的左侧;
rtrim()函数只处理字符串的右侧;


原创文章,如转载,请注明:转载自脚本学习 [ http://www.scriptlearn.com ]

PHP 将数组拆分成多个变量: extract()函数

extract()函数语法:

int extract( array $var_array [, int $extract_type = EXTR_OVERWRITE [, string $prefix ]] )

功能: extract()函数提取关联数组(对数字索引数组无效)每对key和value,生成以key为变量名、value为对应值的多组新变量。

<?php
$size = "old size"; //注意最后size变量的值。

$a = array(
       "color" => "red",
       "size"  => "XXL",
       "price"  => "53");

extract($a);
echo "color = $color<br />";
echo "size  = $size<br />";
echo "price = $price<br />";
?>

结果为:

color = red
size = XXL
price = 53

通过上例发现$size的值为XXL,而不是之前的”old size”,说明默认情况下当数组中的key与已有的变量冲突时,将覆盖原来的变量。

继续介绍extract函数的后两个可选参数。
第二个参数$extract_type是用来控制当发生冲突时的处理方法,可能的值为:
    EXTR_OVERWRITE : 冲突时覆盖已有的变量,默认值。
    EXTR_SKIP : 不覆盖已有的变量,即不在生成该key和value对的变量。
    EXTR_PREFIX_SAME : 冲突时,生成的新变量名加一个前缀字符串,其值由第三个参数指定。
    EXTR_PREFIX_ALL : 对所有生成的新变量名加一个前缀字符串,其值由第三个参数指定。
    EXTR_PREFIX_INVALID : 对key的值换为变量名时无效时(如key第一个字符为数字,而变量名要求第一个字符不能为数字),在变量名加一个前缀字符串,其值由第三个参数指定。
    EXTR_IF_EXISTS : 只取出之前已经存在的变量。
    EXTR_PREFIX_IF_EXISTS : 对EXTR_IF_EXISTS取得的变量,在其变量名加一个前缀字符串,其值由第三个参数指定。
    EXTR_REFS : 以引用的方式提取变量,说明提取变量的值发生改变会影响原数组的值。

注意:在变量名加前缀字符串时,新的变量名为 PREFIX_key,而不是PREFIXkey。

<?php
$a = array(
       "color" => "red",
       "size"  => "XXL",
       "price"  => "53");

extract($a,EXTR_PREFIX_ALL,"SC");
echo "color = $SC_color<br />";
echo "size  = $SC_size<br />";
echo "price = $SC_price<br />";

extract($a,EXTR_REFS);
$color="green";
echo $a['color']; //查看原数组的值
?>

结果为:

color = red
size = XXL
price = 53
green


原创文章,如转载,请注明:转载自脚本学习 [ http://www.scriptlearn.com ]

PHP 数组其它排序方法:反向排序和随机排序

array_reverse()函数与shuffle()函数介绍

array_reverse()

array array_reverse(array)

array_reverse()函数传入参数为一数组,返回一个与传入参数值相同但顺序相反的数组。

<?php
$a = array(1,2,3,4,5);
$a = array_reverse($a);
for ($i=0; $i<count($a); ++$i)
    echo $a[$i]." ";
?>

结果为:

5 4 3 2 1

shuffle()

bool shuffle(array)

shuffle函数对传入的数组进行随机排序,成功返回TRUE,否则返回FALSE。
More >

PHP 多维数组排序

数字索引数组:
bool usort( array &$array, callback $cmp_function )
usort函数对指定数组(参数1)按指定方式(参数2)进行排序。
当我们想对多维数组进行排序时,多维数组的每个元素又是一数组类型,而两个数组如何比较大小?这是需要用户自定义的(是按每个数组的第一元素比较还是…)。

<?php
//定义多维数组
$a = array(
       array("sky", "blue"),
       array("apple", "red"),
       array("tree", "green"));
//自定义数组比较函数,按数组的第二个元素进行比较。
function my_compare($a, $b) {
    if ($a[1] < $b[1])
        return -1;
    else if ($a[1] == $b[1])
        return 0;
    else
        return 1;
}
//排序
usort($a, 'my_compare');
//输出结果
foreach($a as $elem) {
    echo "$elem[0] : $elem[1]<br />";
}

?>

结果为:

sky : blue
tree : green
apple : red

关联数组:
bool uasort(array &$array, callback $cmp_function)
bool uksort(array &$array, callback $cmp_function)

uasort, uksort用法与usort相同,其中uasort()对关联数组的值(value)进行排序,uksort()对关联数组的关键字(key)进行排序。

<?php
$a = array(
       'Sunday' => array(0,'7th'),
       'Friday' => array(5,'5th'),
       'Tuesday'=> array(2,'2nd'));

function my_compare($a, $b) {
    if ($a[1] < $b[1])
        return -1;
    else if ($a[1] == $b[1])
        return 0;
    else
        return 1;
}
//按$a数组的值的第二个元素(7th,5th,2nd)进行排序
uasort($a, 'my_compare');
foreach($a as $key => $value) {
    echo "$key : $value[0] $value[1]<br />";
}
//按$a数组的关键字的第二个字符(r,u,u)进行排序
uksort($a, 'my_compare');
foreach($a as $key => $value) {
    echo "$key : $value[0] $value[1]<br />";
}

?>

结果为:

Tuesday : 2 2nd
Friday : 5 5th
Sunday : 0 7th
Friday : 5 5th
Sunday : 0 7th
Tuesday : 2 2nd


原创文章,如转载,请注明:转载自脚本学习 [ http://www.scriptlearn.com ]

PHP 数组排序(sort)

数字索引数组排序:
函数:sort(array, [sort type])
说明:sort()函数按升序对指定数组(第一个参数)进行排序。
sort函数第二参数作用为指定排序类型,是可选参数,可能的值为:
    SORT_REGULAR: 默认值,不改变类型进行排序;
    SORT_NUMERIC: 把值作为数字进行排序;
    SORT_STRING: 把值作为字符串进行排序;
如数组中有4和”37″,按数字排序,4小于”37″;按字符串排序,4大于”37″;

<?php
$a = array(4,"37",3,100,0,-5);
sort($a);
for ($i=0; $i<6; ++$i){
    echo $a[$i]." ";
}
echo "<br />";
sort($a,SORT_STRING);
for ($i=0; $i<6; ++$i){
    echo $a[$i]." ";
}
echo "<br />";
?>

输出结果:

-5 0 3 4 37 100
-5 0 100 3 37 4

降序排序:rsort(array, [sort type])
参数用法与sort函数相同。

关联数组排序:
函数:asort(array, [sort type])
说明:根据关联数组的元素值进行升序排序。参数使用见上面的sort函数。

函数:ksort(array, [sort type])
说明:根据关联数组的关键字进行升序排序。参数使用见上面的sort函数。

<?php
$a = array(
    "good"  => "bad",
    "right" => "wrong",
    "boy"   => "girl");

echo "value sort<br />";
asort($a);
foreach($a as $key => $value){
    echo "$key : $value<br />";
}

echo "<br />key sort<br />";
ksort($a);
foreach($a as $key => $value){
    echo "$key : $value<br />";
}
?>

输出结果:

value sort
good : bad
boy : girl
right : wrong

key sort
boy : girl
good : bad
right : wrong

降序排序:
arsort(array, [sort type]) 与 asort对应
krsort(array, [sort type]) 与 ksort对应


原创文章,如转载,请注明:转载自脚本学习 [ http://www.scriptlearn.com ]

PHP 数组操作符

联合操作:+
作用: 将第二个数组附加到第一个数组中(返回结果为一新的数组,不是直接改变第一个数组),但是关键字发生冲突的元素将不会加入。

<?php
$a = array(
    'First'  => '1st',
    'Second' => '2nd',
    'Third'  => '3rd');

$b = array(
     "Forth" => '4th',
     "First" => 'another 1st'); // 关键字冲突元素

$c = $a + $b;
foreach ($c as $key => $value) {
    echo $key.": ".$value."<br />";
}
?>

输出结果为:
More >

PHP 关联数组遍历方法大全

在PHP中数组分为两类: 数字索引数组和关联数组。
其中数字索引数组和C语言中的数组一样,下标是为0,1,2…
而关联数组下标可能是任意类型,与其它语言中的hash,map等结构相似。

下面介绍PHP中遍历关联数组的三种方法:
方法1:foreach

<?php
$sports = array(
    'football' => 'good',
    'swimming' => 'very well',
    'running'  => 'not good');
foreach ($sports as $key => $value) {
    echo $key.": ".$value."<br />";
?>

输出结果:

football: good
swimming: very well
running: not good

方法2:each

<?php
$sports = array(
    'football' => 'good',
    'swimming' => 'very well',
    'running'  => 'not good');
while ($elem = each($sports)) {
    echo $elem['key'].": ".$elem['value']."<br />";
?>

方法3:list & each

<?php
$sports = array(
    'football' => 'good',
    'swimming' => 'very well',
    'running'  => 'not good');
while (list($key, $value) = each($sports)) {
    echo $key.": ".$value."<br />";
?>


原创文章,如转载,请注明:转载自脚本学习 [ http://www.scriptlearn.com ]

一步一步学习PHP(8) — 数组

1. PHP中的数组
与其把PHP中的数组理解为我们狭义上的“数组”,我觉得还不妨把这个数组一分为二,一者为我们常规上的数组,一者为我们的Dictionary。

2. 创建数组
如果数组不存在,那么向数组中存放值将会创建数组。
More >

google reader 哪吒
QQ邮箱 my yahoo
抓虾 鲜果