current() ,next(),key()等数组指针函数

本文详细介绍了PHP中数组操作的关键函数,包括current(), end(), prev(), reset(), each(), key() 和 next()的功能及用法,并提供了丰富的示例代码帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • current() - 返回数组中的当前单元
  • end() - 将数组的内部指针指向最后一个单元
  • prev() - 将数组的内部指针倒回一位
  • reset() - 将数组的内部指针指向第一个单元
  • each() - 返回数组中当前的键/值对并将数组指针向前移动一步
  • key() - 从关联数组中取得键名
  • next(array &$array) - 将数组中的内部指针向前移动一位

1、key(array &$array) 返回数组中当前单元的键名。

函数返回数组中内部指针指向的当前单元的键名。 但它不会移动指针。如果内部指针超过了元素列表尾部,或者数组是空的,key() 会返回 NULL。

2、current( array &$array ) - 返回数组中的当前单元

current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。 

Warning:

此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。

注意:Note: 如果数组包含 boolean FALSE 的单元则本函数在碰到这个单元时也返回 FALSE,使得不可能判断是否到了此数组列表的末端。 要正确遍历可能含有空单元的数组,用 each() 函数。    


3、next(array &$array) - 将数组中的内部指针向前移动一位

next()current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。

返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。 

Warning

此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。

Note: 你将无法区别包含数组尾以及 boolean FALSE 单元的数组。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。    


4、end(array &$array) - 将数组的内部指针指向最后一个单元

这个数组。 该数组是通过引用传递的,因为它会被这个函数修改。 这意味着你必须传入一个真正的变量,而不是函数返回的数组,因为只有真正的变量才能以引用传递。

返回最后一个元素的值,或者如果是空数组则返回 FALSE。 

<?php

$fruits 
= array('apple''banana''cranberry');
echo 
end($fruits); // cranberry

?>

5、prev(array &$array) - 将数组的内部指针倒回一位

Warning

此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值

Note: 你会无法区分包含 boolean FALSE 单元的数组开头。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。    


6、reset(array &$array) - 将数组的内部指针指向第一个单元

7、each(array &$array) - 返回数组中当前的键/值对并将数组指针向前移动一步 

在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()。 

返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为01keyvalue。单元 0key 包含有数组单元的键名,1value 包含有数据。

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

  <?php
$foo 
= array("bob""fred""jussi""jouni""egon""marliese");
$bar each($foo);
print_r($bar);
?>

  输出:

Array
(
    [1] => bob
    [value] => bob
    [0] => 0
    [key] => 0
)
Example #2 用 each() 遍历数组


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


reset($fruit);
while (list($key, $val) = each($fruit)) {
    echo "$key => $val\n";
}
?> 

输出;

a => apple
b => banana
c => cranberry

Caution

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

警告

each()也将接受对象,但可能返回意外的结果。其所以不推荐重复虽然each()对象属性。



例子:

<?php
$array 
= array(
    
'fruit1' => 'apple',
    
'fruit2' => 'orange',
    
'fruit3' => 'grape',
    
'fruit4' => 'apple',
    
'fruit5' => 'apple');

// this cycle echoes all associative array
// key where value equals "apple"
while ($fruit_name current($array)) {
    if (
$fruit_name == 'apple') {
        echo 
key($array).'<br />';
    }
    
next($array);
}
?>

输出结果

fruit1<br />
fruit4<br />
fruit5<br />

<?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';

$arr = array();
var_dump(current($arr)); // bool(false)

$arr = array(array());
var_dump(current($arr)); // array(0) { }
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值