温故知新,PHP函数篇

来源:互联网 发布:实施工程师前景知乎 编辑:程序博客网 时间:2024/04/29 19:18

PHP 函数

在使用之前,先用函数检测一下,是否已经加载了相应的模块:
if (extension_loaded('calendar')) {
    //do
}
或者:
if (function_exists('')) {
    //do
}

数组函数Array

数组可以用+号来追加。
<?php
$array1 = array();
$array2 = array(1 => "data");
$result = $array1 + $array2;
?>

array_change_key_case()
更改数组的键名,本函数不改变数字索引
如果一个数组中的多个键名经过本函数后变成一样的话(例如 "keY" 和 "kEY"),最后一个值将覆盖其它的值。


array_filter()过滤数组中的单元
function odd($var)
{
    return($var % 2 == 1);
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
print_r(array_filter($array1, "odd"));
array_filter() 依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

如果没有提供 callback 函数,array_filter() 将删除 input 中所有等值为 FALSE 的条目。
这个功能可用于清除数组中的一些为FALSE的值

array_keys()
可以用来求出指定值在数组中出现的位置/键名
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));

array_map
本函数一个有趣的用法是构造一个数组的数组,这可以很容易的通过用 NULL 作为回调函数名来实现。
<?php
$a = array(1, 2, 3, 4, 5);
$b = array("one", "two", "three", "four", "five");
$c = array("uno", "dos", "tres", "cuatro", "cinco");

$d = array_map(null, $a, $b, $c);
print_r($d);
?>
输出结果如下:
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => one
            [2] => uno
        )
...

array_multisort对多个数组或多维数组进行排序
关联(string)键名保持不变,但数字键名会被重新索引。
输入数组被当成一个表的列并以行来排序――这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。

本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。
<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

本例中将把 volume 降序排列,把 edition 升序排列。

现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。

<?php
// 取得列的列表
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
如果要将改变后的结果返回到原有的数组中,只需将原来的数组变量增加到参数尾部如:

array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

本函数相当有用,为有助于理解,请再看下面这个名次排列例子:
<?php
$grade = array("score" => array(70, 95, 70.0, 60, "70"),
               "name" => array("Zhang San", "Li Si", "Wang Wu",
                               "Zhao Liu", "Liu Qi"));
array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC,
                // 将分数作为数值,由高到低排序
                $grade["name"], SORT_STRING, SORT_ASC);
                // 将名字作为字符串,由小到大排序
var_dump($grade);
?>

usort使用用户自定义的比较函数对数组中的值进行排序
本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
如果要对某个多维数组按指定键名排序,可以用这个函数,例如:
<?php
function cmp($a, $b)
{
    return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

while (list($key, $value) = each($fruits)) {
    echo "/$fruits[$key]: " . $value["fruit"] . "/n";
}
?>


自然排序natsort()
用于模仿人的习惯排序,例如文件名的img1.jpg,img10.jpg,img12.jpg,img2.jpg,
将会按这样的顺序来排:img1.jpg,img2.jpg,img10.jpg,img12.jpg,而不是用sort()所得到的这样的结果:
img1.jpg,img10.jpg,img12.jpg,img2.jpg