PHP函数库分类四.docx

上传人:b****9 文档编号:28713564 上传时间:2023-07-19 格式:DOCX 页数:17 大小:21.74KB
下载 相关 举报
PHP函数库分类四.docx_第1页
第1页 / 共17页
PHP函数库分类四.docx_第2页
第2页 / 共17页
PHP函数库分类四.docx_第3页
第3页 / 共17页
PHP函数库分类四.docx_第4页
第4页 / 共17页
PHP函数库分类四.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

PHP函数库分类四.docx

《PHP函数库分类四.docx》由会员分享,可在线阅读,更多相关《PHP函数库分类四.docx(17页珍藏版)》请在冰豆网上搜索。

PHP函数库分类四.docx

PHP函数库分类四

PHP函数库分类四

1.数组(四)

·array_values -返回数组中所有的值

(PHP4,PHP5)

array_values — 返回数组中所有的值

说明

array array_values ( array $input )

array_values() 返回 input 数组中所有的值并给其建立数字索引。

Example#1 array_values() 例子

php

$array = array("size" => "XL", "color" => "gold");

print_r(array_values($array));

?

>

以上例程会输出:

Array

[0]=>XL

[1]=>gold

·array_walk -对数组中的每个成员应用用户函数

(PHP4,PHP5)

array_walk — 对数组中的每个成员应用用户函数

说明

bool array_walk ( array &$array , callback $funcname [, mixed $userdata ])

成功时返回 TRUE,或者在失败时返回 FALSE.

将用户自定义函数 funcname 应用到 array 数组中的每个单元。

典型情况下 funcname 接受两个参数。

array 参数的值作为第一个,键名作为第二个。

如果提供了可选参数 userdata,将被作为第三个参数传递给callback funcname。

如果 funcname 函数需要的参数比给出的多,则每次 array_walk() 调用 funcname 时都会产生一个E_WARNING级的错误。

这些警告可以通过在 array_walk() 调用前加上PHP的错误操作符 @ 来抑制,或者用 error_reporting()。

Note:

如果 funcname 需要直接作用于数组中的值,则给 funcname 的第一个参数指定为引用。

这样任何对这些单元的改变也将会改变原始数组本身。

Note:

将键名和userdata传递到 funcname 中是PHP4.0新增加的。

array_walk() 不会受到 array 内部数组指针的影响。

array_walk() 会遍历整个数组而不管指针的位置。

用户不应在回调函数中改变该数组本身。

例如增加/删除单元,unset单元等等。

如果array_walk() 作用的数组改变了,则此函数的的行为未经定义,且不可预期。

Example#1 array_walk() 例子

php

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");

function test_alter(&$item1, $key, $prefix)

{

    $item1 = "$prefix:

 $item1";

}

function test_print($item2, $key)

{

    echo "$key. $item2";

}

echo "Before ...:

";

array_walk($fruits, 'test_print');

array_walk($fruits, 'test_alter', 'fruit');

echo "... and after:

";

array_walk($fruits, 'test_print');

?

>

以上例程会输出:

Before...:

d.lemon

a.orange

b.banana

c.apple

...andafter:

d.fruit:

lemon

a.fruit:

orange

b.fruit:

banana

c.fruit:

apple

·array_walk_recursive -对数组中的每个成员递归地应用用户函数

(PHP5)

array_walk_recursive — 对数组中的每个成员递归地应用用户函数

说明

bool array_walk_recursive ( array &$input , callback $funcname [, mixed$userdata ])

将用户自定义函数 funcname 应用到 array 数组中的每个单元。

本函数会递归到更深层的数组中去。

典型情况下 funcname 接受两个参数。

input 参数的值作为第一个,键名作为第二个。

如果提供了可选参数 userdata,将被作为第三个参数传递给callback funcname。

成功时返回 TRUE,或者在失败时返回 FALSE.

Note:

如果 funcname 需要直接作用于数组中的值,则给 funcname 的第一个参数指定为引用。

这样任何对这些单元的改变也将会改变原始数组本身。

Example#1 array_walk_recursive() 例子

php

$sweet = array('a' => 'apple', 'b' => 'banana');

$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function test_print($item, $key)

{

    echo "$key holds $item ";

}

array_walk_recursive($fruits, 'test_print');

?

>

以上例程会输出:

aholdsapple

bholdsbanana

sourholdslemon

注意上例中的键'sweet'并没有显示出来。

任何其值为数组的键都不会被传递到回调函数中去。

·arsort -对数组进行逆向排序并保持索引关系

(PHP4,PHP5)

arsort — 对数组进行逆向排序并保持索引关系

说明

bool arsort ( array &$array [, int $sort_flags ])

本函数对数组进行排序,数组的索引保持和单元的关联。

主要用于对那些单元顺序很重要的结合数组进行排序。

成功时返回 TRUE,或者在失败时返回 FALSE.

Example#1 arsort() 例子

php

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");

arsort($fruits);

foreach ($fruits as $key => $val) {

    echo "$key = $val ";

}

?

>

以上例程会输出:

a=orange

d=lemon

b=banana

c=apple

fruits被按照字母顺序逆向排序,并且单元的索引关系不变。

可以用可选的参数 sort_flags 改变排序的行为,详情见 sort()。

·asort -对数组进行排序并保持索引关系

(PHP4,PHP5)

asort — 对数组进行排序并保持索引关系

说明

bool asort ( array &$array [, int $sort_flags ])

本函数对数组进行排序,数组的索引保持和单元的关联。

主要用于对那些单元顺序很重要的结合数组进行排序。

成功时返回 TRUE,或者在失败时返回 FALSE.

Example#1 asort() 例子

php

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");

asort($fruits);

foreach ($fruits as $key => $val) {

    echo "$key = $val ";

}

?

>

以上例程会输出:

c=apple

b=banana

d=lemon

a=orange

fruits被按照字母顺序排序,并且单元的索引关系不变。

·compact -建立一个数组,包括变量名和它们的值

(PHP4,PHP5)

compact — 建立一个数组,包括变量名和它们的值

说明

array compact ( mixed $varname [, mixed $... ])

compact() 接受可变的参数数目。

每个参数可以是一个包括变量名的字符串或者是一个包含变量名的数组,该数组中还可以包含其它单元内容为变量名的数组, compact() 可以递归处理。

对每个参数,compact() 在当前的符号表中查找该变量名并将它添加到输出的数组中,变量名成为键名而变量的内容成为该键的值。

简单说,它做的事和 extract() 正好相反。

返回将所有变量添加进去后的数组。

任何没有变量名与之对应的字符串都被略过。

Note:

 Gotcha

因为可变变量也许不能在函数内部用于PHP的超全局数组,此时不能将超全局数组传递入compact() 中。

Example#1 compact() 例子

php

$city  = "San Francisco";

$state = "CA";

$event = "SIGGRAPH";

$location_vars = array("city", "state");

$result = compact("event", "nothing_here", $location_vars);

?

>

经过处理后,$result 为:

Array

[event]=>SIGGRAPH

[city]=>SanFrancisco

[state]=>CA

·count -计算数组中的单元数目或对象中的属性个数

(PHP4,PHP5)

count — 计算数组中的单元数目或对象中的属性个数

说明

int count ( mixed $var [, int $mode ])

返回 var 中的单元数目,通常是一个 array,任何其它类型都只有一个单元。

对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。

该接口只有一个方法 count(),此方法返回 count() 函数的返回值。

如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果var 是 NULL 则结果是 0。

Note:

 可选的 mode 参数自PHP4.2.0起可用。

如果可选的 mode 参数设为 COUNT_RECURSIVE(或1),count() 将递归地对数组计数。

对计算多维数组的所有单元尤其有用。

mode 的默认值是 0。

count() 识别不了无限递归。

Caution

count() 对没有初始化的变量返回0,但对于空的数组也会返回0。

用 isset() 来测试变量是否已经初始化。

请参考手册中数组一节中关于怎样在PHP中实现和使用数组的详细解释。

Example#1 count() 例子

php

$a[0] = 1;

$a[1] = 3;

$a[2] = 5;

$result = count($a);

// $result == 3

$b[0] = 7;

$b[5] = 9;

$b[10] = 11;

$result = count($b);

// $result == 3;

$result = count(null);

// $result == 0

$result = count(false);

// $result == 1

?

>

Example#2 count() 的递归例子(PHP>=4.2.0)

php

$food = array('fruits'  => array('orange', 'banana', 'apple'),

              'veggie'  => array('carrot', 'collard','pea'));

// recursive count

echo count($food, COUNT_RECURSIVE);  // output 8

// normal count

echo count($food);                  // output 2

?

>

·current -返回数组中的当前单元

(PHP4,PHP5)

current — 返回数组中的当前单元

说明

mixed current ( array &$array )

每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。

current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针。

如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。

 Warning

如果数组包含有空的单元(0或者"",空字符串)则本函数在碰到这个单元时也返回 FALSE。

这使得用 current() 不可能判断是否到了此数组列表的末端。

要正确遍历可能含有空单元的数组,用 each() 函数。

Example#1 current() 及相关函数的用法示例

php

$transport = array('foot', 'bike', 'car', 'plane');

$mode = current($transport); // $mode = 'foot';

$mode = next($transport);    // $mode = 'bike';

$mode = current($transport); // $mode = 'bike';

$mode = prev($transport);    // $mode = 'foot';

$mode = end($transport);     // $mode = 'plane';

$mode = current($transport); // $mode = 'plane';

?

>

·each -返回数组中当前的键/值对并将数组指针向前移动一步

(PHP4,PHP5)

each — 返回数组中当前的键/值对并将数组指针向前移动一步

说明

array each ( array &$array )

返回 array 数组中当前指针位置的键/值对并向前移动数组指针。

键值对被返回为四个单元的数组,键名为 0,1,key 和 value。

单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。

如果内部指针越过了数组的末端,则 each() 返回 FALSE。

Example#1 each() 例子

php

$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");

$bar = each($foo);

print_r($bar);

?

>

$bar 现在包含有如下的键/值对:

Array

{

[1]=>bob

[value]=>bob

[0]=>0

[key]=>0

}

php

$foo = array("Robert" => "Bob", "Seppo" => "Sepi");

$bar = each($foo);

print_r($bar);

?

>

$bar 现在包含有如下的键/值对:

Array

{

[1]=>Bob

[value]=>Bob

[0]=>Robert

[key]=>Robert

}

each() 经常和 list() 结合使用来遍历数组,例如:

Example#2用 each() 遍历数组

php

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');

reset($fruit);

while (list($key, $val) = each($fruit)) {

    echo "$key => $val ";

}

?

>

以上例程会输出:

a=>apple

b=>banana

c=>cranberry

在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。

如果要再用each遍历数组,必须使用 reset()。

Caution

因为将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上边的例子中如果我们在循环内部将 $fruit 赋给了另一个变量的话将会导致无限循环。

·end -将数组的内部指针指向最后一个单元

(PHP4,PHP5)

end — 将数组的内部指针指向最后一个单元

说明

mixed end ( array &$array )

end() 将 array 的内部指针移动到最后一个单元并返回其值。

Example#1简单的 end() 例子

php

$fruits = array('apple','banana','cranberry');

echo end($fruits); // cranberry

?

>

·extract -从数组中将变量导入到当前的符号表

(PHP4,PHP5)

extract — 从数组中将变量导入到当前的符号表

说明

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

本函数用来将变量从数组中导入到当前的符号表中。

接受结合数组 var_array 作为参数并将键名当作变量名,值作为变量的值。

对每个键/值对都会在当前的符号表中建立变量,并受到extract_type 和 prefix 参数的影响。

Note:

自版本4.0.5起本函数返回被提取的变量数目。

Note:

EXTR_IF_EXISTS 和 EXTR_PREFIX_IF_EXISTS 是版本4.2.0中引进的。

Note:

EXTR_REFS 是版本4.3.0中引进的。

extract() 检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。

对待非法/数字和冲突的键名的方法将根据 extract_type 参数决定。

可以是以下值之一:

EXTR_OVERWRITE

如果有冲突,覆盖已有的变量。

EXTR_SKIP

如果有冲突,不覆盖已有的变量。

EXTR_PREFIX_SAME

如果有冲突,在变量名前加上前缀 prefix。

EXTR_PREFIX_ALL

给所有变量名加上前缀 prefix。

自PHP4.0.5起这也包括了对数字索引的处理。

EXTR_PREFIX_INVALID

仅在非法/数字的变量名前加上前缀 prefix。

本标记是PHP4.0.5新加的。

EXTR_IF_EXISTS

仅在当前符号表中已有同名变量时,覆盖它们的值。

其它的都不处理。

可以用在已经定义了一组合法的变量,然后要从一个数组例如$_REQUEST中提取值覆盖这些变量的场合。

本标记是PHP4.2.0新加的。

EXTR_PREFIX_IF_EXISTS

仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。

本标记是PHP4.2.0新加的。

EXTR_REFS

将变量作为引用提取。

这有力地表明了导入的变量仍然引用了 var_array 参数的值。

可以单独使用这个标志或者在 extract_type 中用OR与其它任何标志结合使用。

本标记是PHP4.3.0新加的。

如果没有指定 extract_type,则被假定为 EXTR_OVERWRITE。

注意 prefix 仅在 extract_type 的值是EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或EXTR_PREFIX_IF_EXISTS 时需要。

如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。

前缀和数组键名之间会自动加上一个下划线。

extract() 返回成功导入到符号表中的变量数目。

Warning

不要对不能信任的数据使用 extract(),例如用户的输入($_GET,...)。

如果这样做,举例说,要临时运行依赖于 register_globals 的老代码,要确保使用不会覆盖的 extract_type值,例如 EXTR_SKIP,并且要留意应该按照variables_order定义的顺序来提取。

extract() 的一种可能用法是将 wddx_deserialize() 返回的结合数组中的内容导入到符号表变量中去。

Example#1 extract() 例子

php

/* 假定 $var_array 是 wddx_deserialize 返回的数组*/

$size = "large";

$var_array = array("color" => "blue",

                   "size"  => "medium",

                   "shape" => "sphere");

extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $size, $shape, $wddx_size ";

?

>

以上例程会输出:

blue,large,sphere,medium

$size 没有被覆盖,因为指定了 EXTR_PREFIX_SAME,这使得 $wddx_size 被建立。

如果指定了 EXTR_SKIP,则$wddx_size也不会被建立。

EXTR_OVERWRITE 将使 $size 的值为“medium”,EXTR_PREFIX_ALL 将建立新变量 $wddx_color,$wddx_size 和$wddx_shape。

必须使用关联数组,数字索引的数组将不会产生结果,除非用了 EXTR_PREFIX_ALL 或者EXTR_PREFIX_INVALID。

·in_array -检查数组中是否存在某个值

(PHP4,PHP5)

in_array — 检查数组中是否存在某个值

说明

bool in_array ( mixed $needle , array $haystack [, bool $strict ])

在 haystack 中搜索 needle,如果找到则返回 TRUE,否则返回 FALSE。

如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和haystack 中的相同。

Note:

如果 needle 是字符串,则

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1