叁柒設計 三七设计 Three seven design 我的学习与分享
详细信息
来自:关键字:

PHP4手册:函数库及函数(三) 阵列处理函式库

  December 21th,2008 22:39:58   Category : PHP+Mysql
 Click (995)

--------------------------------------------------------------------------------
阵列处理函式库
--------------------------------------------------------------------------------


本函式库共有 23 个函式
array: 建立一个新的阵列。
array_walk: 让使用者自订函数能处理阵列中的每一个元素。
arsort: 将阵列的值由大到小排序。
asort: 将阵列的值由小到大排序。
count: 计算变数或阵列中的元素个数。
current: 传回阵列中目前的元素。
each: 传回阵列中下一个元素的索引及值。
end: 将阵列的内部指标指到最后的元素。
key: 取得阵列中的索引资料。
ksort: 将阵列的元素依索引排序。
list: 列出阵列中元素的值。
next: 将阵列的内部指标向后移动。
pos: 传回阵列目前的元素。
prev: 将阵列的内部指标往前移动。
range: 建立一个整数范围的阵列。
reset: 将阵列的指标指到阵列第一个元素。
rsort: 将阵列的值由大到小排序。
shuffle: 将阵列的顺序弄混。
sizeof: 获知阵列的大小。
sort: 将阵列排序。
uasort: 将阵列依使用者自定的函式排序。
uksort: 将阵列的索引依使用者自定的函式排序。
usort: 将阵列的值依使用者自定的函式排序。


--------------------------------------------------------------------------------
函式:array()
--------------------------------------------------------------------------------


阵列处理函式库


array
建立一个新的阵列。

语法: array array(...);

传回值: 阵列

函式种类: 资料处理




内容说明


传回的参数是阵列形态。参数可以是带有 => 运算子的索引。array() 其实不是一个正规的函式,它主要是要用来表示阵列。




使用范例


下面范例用显示如何建立一个二维阵列,如何指定联合阵列的键值,及如何略过和继续阵列中的数字索引。

$fruits = array(
"fruits" => array("a"=>"orange","b"=>"banana","c"=>"apple"),
"numbers" => array(1, 2, 3, 4, 5, 6),
"holes" => array("first", 5 => "second", "third")
);



参考


list()


--------------------------------------------------------------------------------
函式:array_walk()
--------------------------------------------------------------------------------


阵列处理函式库


array_walk
让使用者自订函数能处理阵列中的每一个元素。

语法: int array_walk(array arr, string func);

传回值: 整数

函式种类: 资料处理




内容说明


此函式使每个阵列元素 arr 依序与函式名称 func 相对应。元素传送到函式 func 的第一个参数,若参数超过一个,则每次都会有警告讯息。要处理警告讯息,可在本函式前面加上 '@' 字元 (变成 @array_walk);或是使用 error_reporting 函式。

注意: 使用者自订函式 func 真的会将阵列元素 arr 依序代入,所以任何对元素所做的改变都会影响到阵列本身。




使用范例


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

function test_alter( $item1 ) {
$item1 = 'bogus';
}

function test_print( $item2 ) {
echo "$item2
\n";
}

array_walk( $fruits, 'test_print' );
array_walk( $fruits, 'test_alter' );
array_walk( $fruits, 'test_print' );
?>



参考


each() list()


--------------------------------------------------------------------------------
函式:arsort()
--------------------------------------------------------------------------------


阵列处理函式库


arsort
将阵列的值由大到小排序。

语法: void arsort(array array);

传回值: 无

函式种类: 资料处理




内容说明


这个函式将阵列的值重新排序,由大至小排列。阵列的索引亦跟着值的顺序而变动。当您在程式中需要重新整理阵列值的顺序时,就可以使用这个函式。




使用范例


底下的范例传回的结果为
fruits[a] = orange
fruits[d] = lemon
fruits[b] = banana
fruits[c] = apple。
我们可以看到水果名 (阵列值) 已按英文字母的顺序由 z 往 a 重新排序,而索引亦跟着值变动。

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
arsort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>



参考


asort() rsort() ksort() sort()


--------------------------------------------------------------------------------
函式:asort()
--------------------------------------------------------------------------------


阵列处理函式库


asort
将阵列的值由小到大排序。

语法: void asort(array array);

传回值: 无

函式种类: 资料处理




内容说明


这个函式将阵列的值重新排序,由小至大排列。阵列的索引亦跟着值的顺序而变动。当您在程式中需要重新整理阵列值的顺序时,就可以使用这个函式。




使用范例


底下的范例传回的结果为
fruits[c] = apple
fruits[b] = banana
fruits[d] = lemon
fruits[a] = orange
我们可以看到水果名 (阵列值) 已按英
文字母的顺序由 a 往 z 排序,而索引亦跟着值变动。

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
asort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>



参考


arsort() rsort() ksort() sort()


--------------------------------------------------------------------------------
函式:count()
--------------------------------------------------------------------------------


阵列处理函式库


count
计算变数或阵列中的元素个数。

语法: int count(mixed var);

传回值: 整数

函式种类: 资料处理




内容说明


这个函式用来计算阵列的元素个数 (亦可将变数代入,只不过传回的整数将是 1)。变数还没有设定时,传回值为 0。变数若不是阵列,传回值为 1。




参考


sizeof() isset() is_array()

--------------------------------------------------------------------------------
函式:current()
--------------------------------------------------------------------------------


阵列处理函式库


current
传回阵列中目前的元素。

语法: mixed current(array array);

传回值: 混合型态资料

函式种类: 资料处理




内容说明


说明: 每一个阵列变数都有一个内部指标,指到它的每一个元素。此外,为了交互参考,阵列有份所有元素的双向链结表。阵列的内部指标指到原先插入的元素上,直到程式执行到有更动阵列指标的函式。函式 current() 简单地传回阵列元素中目前指到的阵列内部指标。它不会改变指标的值,若阵列指标指到内部指标表外,则传回 false 的值。

注意: 若阵列中包含空的元素 (0 或者 "" 空字串),则本函式会传回 false 值。要是目前元素是个零值的空元素或者是超出阵列指标,结果当然是未定的 false 值。遇到这种情形,可以使用 each() 函式会更适合。




参考


end() next() prev() reset()

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
函式:each()
--------------------------------------------------------------------------------


阵列处理函式库


each
传回阵列中下一个元素的索引及值。

语法: array each(array array);

传回值: 阵列

函式种类: 资料处理




内容说明


传回阵列为目前阵列指标的 索引/值 对。传回的阵列有四个元素,依序为 0, 1, 索引, 及值。前述的 0 与 索引 为阵列的索引,1 与 值则为阵列元素的值。




使用范例


范例一:
$foo = array( "bob", "fred", "jussi", "jouni" );
$bar = each( $foo );
?>
上面的例子,传回阵列 $bar 的 索引/值 为
0 => 0
1 => 'bob'
key => 0
value => 'bob'

范例二:
$foo = array( "Robert" => "Bob", "Seppo" => "Sepi" );
$bar = each( $foo );
?>
这个的例子,传回阵列 $bar 的 索引/值 为
0 => 'Robert'
1 => 'Bob'
key => 'Robert'
value => 'Bob'

范例三:
each() 函式最典型的例子是拿来与 list() 函式合用,如下例的 $HTTP_POST_VARS 变数。
echo "POST 所送出的值为:
";
while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
echo "$key => $val
";
}
?>



参考


current() key() list() next() prev() reset()


--------------------------------------------------------------------------------
函式:end()
--------------------------------------------------------------------------------


阵列处理函式库


end
将阵列的内部指标指到最后的元素。

语法: end(array array);

传回值: 无

函式种类: 资料处理




内容说明


本函式会改变阵列的内部指标,它将指标指到最后一个元素上。




参考


current() each() next() reset()

--------------------------------------------------------------------------------
函式:key()
--------------------------------------------------------------------------------


阵列处理函式库


key
取得阵列中的索引资料。

语法: mixed key(array array);

传回值: 混合型态资料

函式种类: 资料处理




内容说明


本函式从目前阵列的指标,传回其索引。




参考


current() next()

--------------------------------------------------------------------------------
函式:ksort()
--------------------------------------------------------------------------------


阵列处理函式库


ksort
将阵列的元素依索引排序。

语法: void ksort(array array);

传回值: 无

函式种类: 资料处理




内容说明


本函式将阵列中的元素依索引排序,排序后的索引和值仍然对应。




使用范例


$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
ksort($fruits);
for(reset($fruits); $key = key($fruits); next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]."\n";
}
?>

上面的例子,传回的资料为
fruits[a] = orange
fruits[b] = banana
fruits[c] = apple
fruits[d] = lemon




参考


arsort() asort() sort() rsort()

--------------------------------------------------------------------------------
函式:list()
--------------------------------------------------------------------------------


阵列处理函式库


list
列出阵列中元素的值。

语法: void list(...);

传回值: 无

函式种类: 资料处理




内容说明


和 array 函式一样,不算是正规的函式。list() 函式用在列出所有阵列中的数值。




使用范例


下面的范例列出从 MySQL 资料库传回的阵列资料。


员工姓名
薪资


$result = mysql($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
print(" \n".
" $name \n".
" $salary \n".
"
\n");
}

?>




参考


each() array()


--------------------------------------------------------------------------------
函式:next()
--------------------------------------------------------------------------------


阵列处理函式库


next
将阵列的内部指标向后移动。

语法: mixed next(array array);

传回值: 混合型态资料

函式种类: 资料处理




内容说明


这个函式传回阵列下个元素的内部指标,若没有下个元素,则传回 false 值。当然,若是一个空的阵列,它也传回 false 值。要正确地处理可能是空的阵列,可以使用 each() 函式。此函式看起来像 current() 函式,不同地方在于本函式使指标往后指到下一个元素,并传回新的指标处的元素值,意即指标后移,并传回下一个元素值。




参考


current() end() prev() reset()


--------------------------------------------------------------------------------
函式:pos()
--------------------------------------------------------------------------------


阵列处理函式库


pos
传回阵列目前的元素。

语法: mixed pos(array array);

传回值: 混合型态资料

函式种类: 资料处理




内容说明


此函式其实就是 current() 函式。




参考


end() next() prev() reset()

--------------------------------------------------------------------------------
函式:prev()
--------------------------------------------------------------------------------


阵列处理函式库


prev
将阵列的内部指标往前移动。

语法: mixed prev(array array);

传回值: 混合型态资料

函式种类: 资料处理




内容说明


这个函式传回阵列前一个元素的内部指标,若没有前一个元素,则传回 false 值。当然,若是一个空的阵列,它也传回 false 值。要正确地处理可能是空的阵列,可以使用 each() 函式。此函式有点像 next() 函式,只是 prev() 函式是将指标往前移,而 next() 函式是将指标往后移。




参考


current() end() next() reset()

--------------------------------------------------------------------------------
函式:range()
--------------------------------------------------------------------------------


阵列处理函式库


range
建立一个整数范围的阵列。

语法: array range(int low, int high);

传回值: 阵列

函式种类: 资料处理




内容说明


此函式建立一个由小到大的连续整数阵列。在 shuffle() 函式有使用范例。




参考


shuffle()

--------------------------------------------------------------------------------
函式:reset()
--------------------------------------------------------------------------------


阵列处理函式库


reset
将阵列的指标指到阵列第一个元素。

语法: mixed reset(array array);

传回值: 混合型态资料

函式种类: 资料处理




内容说明


本函式将阵列的指标重设,将指标改指到阵列的第一个元素。传回值的内容也是阵列的第一个元素。




使用范例


技巧:
kk@shonline.de 指出 (30-Jul-1998),当阵列的资料不够稳定时,使用 reset() 会有警告讯息。最常发生的时候是处理 HTML 表单(form)的输入资料时,若使用者输入的资料不够充份,或使用者故意增删输入 (input) 栏位,就有可能会有警告讯息。用 @reset() 的方式可使警告讯息不出现 (在 reset() 前加 @),不过这只是掩耳盗铃的方式;要斧底抽薪的方法是使用 if (isset()) 的方式 (参见 4.48.14 isset() 函式),如下例

if (isset($form_array)) {
reset($form_array);
while (list($k, $v) = each($form_array)) {
do_something($k, $v);
}
}
?>



参考


current() each() next() prev()

--------------------------------------------------------------------------------
函式:rsort()
--------------------------------------------------------------------------------


阵列处理函式库


rsort
将阵列的值由大到小排序。

语法: void rsort(array array);

传回值: 无

函式种类: 资料处理




内容说明


本函式将阵列依由大到小的方式重排。




使用范例


$fruits = array("lemon","orange","banana","apple");
rsort($fruits);
for(reset($fruits); list($key,$value) = each($fruits); ) {
echo "fruits[$key] = ".$value."\n";
}
?>
处理后的结果为
fruits[0] = orange
fruits[1] = lemon
fruits[2] = banana
fruits[3] = apple




参考


arsort() asort() ksort() sort() usort()


--------------------------------------------------------------------------------
函式:shuffle()
--------------------------------------------------------------------------------


阵列处理函式库


shuffle
将阵列的顺序弄混。

语法: void shuffle(array array);

传回值: 无

函式种类: 资料处理




内容说明


本函式将阵列以随机的方式使全部元素重新乱排。




使用范例


$numbers = range(1,20);
srand(time());
shuffle($numbers);
while (list(,$number) = each($numbers)) {
echo "$number ";
}
?>

注意:
ccunning@math.ohio-state.edu 指出 (31-May-1999),在 Solaris 上由于受了 libc 函式馆的影响,会使本函式出现问题。目前解决的方式如下面的例子。(注: 或许之后新的 PHP 版本会修正这个问题。)
function myshuffle($array) {
mt_srand((double) microtime()*1000000);
$num = count($array);
for ($i=0; $i<$num-1; $i++) {
$n = mt_rand($i+1,$num);
$temp = $array[$n];
$array[$n] = $array[$i];
$array[$i] = $temp;
}
}
$array = array(1,2,3,4,5,6,7,8,9,10);
myshuffle(&$array);
while (list(,$var)=each($array)) {
echo $var . " ";
}
?>




参考


arsort() asort() ksort() rsort() sort() usort()


--------------------------------------------------------------------------------
函式:sizeof()
--------------------------------------------------------------------------------


阵列处理函式库


sizeof
获知阵列的大小。

语法: int sizeof(array array);

传回值: 整数

函式种类: 资料处理




内容说明


本函式以整数型态传回阵列的元素个数。




参考


count()

--------------------------------------------------------------------------------
函式:sort()
--------------------------------------------------------------------------------


阵列处理函式库


sort
将阵列排序。

语法: void sort(array array);

传回值: 无

函式种类: 资料处理




内容说明


本函式将阵列依由小到大的方式重排。




使用范例


$fruits = array("lemon","orange","banana","apple");
sort($fruits);
for(reset($fruits); list($key,$value) = each($fruits); ) {
echo "fruits[$key] = ".$value."\n";
}
?>

传回的结果为
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange



参考


arsort() asort() ksort() rsort() usort()


--------------------------------------------------------------------------------
函式:uasort()
--------------------------------------------------------------------------------


阵列处理函式库


uasort
将阵列依使用者自定的函式排序。

语法: void uasort(array array, function cmp_function);

传回值: 无

函式种类: 资料处理




内容说明


本函式将阵列依使用者自定的方式重排,当然元素的索引和值仍然保持对应的关系。当您觉得需要自行设计排序的方式时,可以先自订处理函式,再使用本函式将阵列值排序。




参考


arsort() asort() ksort() rsort() sort() uksort()


--------------------------------------------------------------------------------
函式:uksort()
--------------------------------------------------------------------------------


阵列处理函式库


uksort
将阵列的索引依使用者自定的函式排序。

语法: void uksort(array array, function cmp_function);

传回值: 无

函式种类: 资料处理




内容说明


本函式将阵列的索引依使用者自定的方式重排,cmp_function 即使用者自行开发的函式。




使用范例


function mycompare($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
uksort($a, mycompare);
while(list($key, $value) = each($a)) {
echo "$key: $value\n";
}
?>

上面的程式传回资料为
20: twenty
10: ten
4: four
3: three



参考


arsort() asort() ksort() rsort() sort() uasort()


--------------------------------------------------------------------------------
函式:usort()
--------------------------------------------------------------------------------


阵列处理函式库


usort
将阵列的值依使用者自定的函式排序。

语法: void usort(array array, function cmp_function);

传回值: 无

函式种类: 资料处理




内容说明


本函式将阵列的值依使用者自定的方式重排。若程式中需要使用特殊的排序方式,则可以使用这个函式。




使用范例


function cmp($a,$b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array(3,2,5,6,1);
usort($a, cmp);
while(list($key,$value) = each($a)) {
echo "$key: $value\n";
}
?>

此例的传回值为
0: 6
1: 5
2: 3
3: 2
4: 1



参考


arsort() asort() ksort() rsort() sort()

[ 资讯评论 ]
暂时没有任何评论!
[ 提交评论 ]
请选择表情
  • 昵称:
  • *
  • 验证码:
  • *点击更换验证码
  • 尚能输入个字符
申明:本网站部分分享内容来自网络,如有侵权请及时与我联系,谢谢,另网友评论仅代表个人观点,与本站立场无关,如果在评论中发表违反我国任何法律的,请即时与我们联系(QQ:77132915),我们将立即予以删除. [ 注:提交评论后,通过审核后方能在网站上显示!]