【问题标题】:next element in a associative php array关联php数组中的下一个元素
【发布时间】:2011-09-02 18:12:45
【问题描述】:

这看起来很简单,但我想不通

$users_emails = array(
'Spence' => 'spence@someplace.com', 
'Matt'   => 'matt@someplace.com', 
'Marc'   => 'marc@someplace.com', 
'Adam'   => 'adam@someplace.com', 
'Paul'   => 'paul@someplace.com');

我需要获取数组中的下一个元素,但我无法弄清楚...例如

如果我有

$users_emails['Spence']

我需要返回 matt@someplace.com 如果它是

$users_emails['Paul'] 

我需要从头开始并返回 spence@someplace.com

我试过了

$next_user = (next($users_emails["Spence"]));

这也是

 ($users_emails["Spence"] + 1 ) % count( $users_emails )

但他们没有返回我所期望的

【问题讨论】:

  • 关联数组是否有序?
  • 您在键中使用的名称是一次性输入,还是需要将所有值与对应的电子邮件一起打印出来?
  • 可能要为此创建一个循环链表。
  • 您必须将 array_pointer 移动到下一个并在您自己阅读 Array 函数及其那里如何手动迭代数组

标签: php loops


【解决方案1】:
reset($array);
while (list($key, $value) = each($array)) { ...

Reset() 将数组指针回退到第一个元素,each() 将当前元素的键和值作为数组返回,然后移动到下一个元素。

list($key, $value) = each($array);
// is the same thing as
$key = key($array); // get the current key
$value = current($array); // get the current value
next($array); // move the internal pointer to the next element

您可以使用next($array)prev($array)reset($array)end($array) 进行导航,同时使用current($array) 和/或key($array) 读取数据。

或者,如果你遍历所有这些,你可以使用 foreach

foreach ($array as $key => $value) { ...

【讨论】:

    【解决方案2】:

    你可以这样做:

    $users_emails = array(
    'Spence' => 'spence@someplace.com', 
    'Matt'   => 'matt@someplace.com', 
    'Marc'   => 'marc@someplace.com', 
    'Adam'   => 'adam@someplace.com', 
    'Paul'   => 'paul@someplace.com');
    
    $current = 'Spence';
    $keys = array_keys($users_emails);
    $ordinal = (array_search($current,$keys)+1)%count($keys);
    $next = $keys[$ordinal];
    print_r($users_emails[$next]);
    

    但是我认为您的逻辑可能有错误,您正在做的事情可以做得更好,例如使用 foreach 循环。

    【讨论】:

      【解决方案3】:

      您最好将它们存储在索引数组中以实现您正在寻找的功能

      【讨论】:

        猜你喜欢
        • 2012-06-06
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多