如何更新使用已弃用 each() 函数的代码?

新手上路,请多包涵

在 PHP 7.2 中, each 已弃用。 文档 说:

警告 自 PHP 7.2.0 起,该函数已被弃用。强烈建议不要依赖此功能。

如何更新我的代码以避免使用它?这里有些例子:

  1. ”` \(ar = \)o->me; reset(\(ar); list(\)typ, \(val) = each(\)ar);

2. ```
    $out = array('me' => array(), 'mytype' => 2, '_php_class' => null);
   $expected = each($out);

  1. ”` for(reset(\(broken);\)kv = each($broken);) {…}

4. ```
    list(, $this->result) = each($this->cache_data);

  1. ”` // iterating to the end of an array or a limit > the length of the array \(i = 0; reset(\)array); while( (list(\(id, \)item) = each(\(array)) || \)i < 30 ) { // code $i++; }

”`

当我在 PHP 7.2 上执行代码时,我收到以下错误:

已弃用:each() 函数已弃用。此消息将在进一步调用时被隐藏

原文由 yokogeri 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答
  1. 对于前两个示例案例,您可以使用 key()current() 来分配您需要的值。
    $ar = $o->me;   // reset isn't necessary, since you just created the array
   $typ = key($ar);
   $val = current($ar);

  1. ”` \(out = array('me' => array(), 'mytype' => 2, '_php_class' => null); \)expected = [key(\(out), current(\)out)];


   在这些情况下,您可以使用 `next()` 来推进光标,但如果您的其余代码不依赖于此,则可能没有必要。

3. 对于第三种情况,我建议只使用 `foreach()` 循环并在循环内分配 `$kv` 。


foreach ($broken as $k => $v) {
    $kv = [$k, $v];

}


4. 对于第四种情况,在 `list()` 中似乎忽略了键,因此您可以分配当前值。


$this->result = current($this->cache_data);


   与前两种情况一样,可能需要使用 `next()` 推进光标,具体取决于您的其余代码如何与 `$this->cache_data` 交互。

5. 第五个可以替换为 `for()` 循环。


reset($array);

for (\(i = 0; \)i < 30; \(i++) { \)id = key(\(array); \)item = current(\(array); // code next(\)array); }

”`

原文由 Don‘t Panic 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于所有评论员。函数 foreach 不适用于元素计数发生变化的动态数组。我认为使用自定义函数“每个”John Tilley - 动态数组的单一正确方法。对于静态数组,不要使用“每个”nobody。 “Foreach”无所不知。

原文由 maiskiykot 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题