PHP 7.2:不推荐使用。如何转换这些示例?

时间:2018-07-13 18:20:39

标签: php deprecated

在PHP 7.2中,不推荐使用eachThe documentation说:

  

警告该功能自PHP 7.2.0起已被弃用。强烈建议不要使用此功能。

如何更新代码以避免使用它?以下是一些示例:

  1. while ($x = each($y) {

  2. while (($x = each($y)) && ($a = each($b))) {

我认为在这种情况下我需要使用foreach,但是我不确定如何正确地使用它。我已经在stackoverflow和其他站点上检查了很多示例,但是这些示例的构造都不像上面的2。

编辑 我正在寻找尽可能while的单行通用插入代码替换(仅一行或几行代码),而无需完全重写脚本/应用程序由于上述变化。

谢谢

2 个答案:

答案 0 :(得分:1)

这是方法2的一种方法:

<?php
$y = ['f','g','e'];  // 3 items
$b = ['b'=>'hi', 6]; // 2 items

// Get an indexed array of keys from both arrays
$y_keys = array_keys($y);
$b_keys = array_keys($b);

// Loop one of the keysets
foreach( $y_keys as $k=>$v )
{
    // Check the other keyset to see if it contains as many elements
    if(isset($b_keys[$k]))
    {
        $x = [ $v => $y[$v] ];
        $a = [ $b_keys[$k] => $b[$b_keys[$k]] ];

        // Freely use $x and $a moving forward

        var_dump($x, $a);
    }
    else
    {
        // stop looping because one array has more/less than the other
        break;
    }
}

示例1更简单:

<?php
$y = ['f','g','e'];  // 3 items

foreach( $y as $k=>$v )
{
    $x = [ $k => $v ];
}

答案 1 :(得分:1)

我意识到您正在为这两个兼容PHP 7.2的示例寻找通用的等效替代程序,并且希望这里的人能够回答这个问题(因为这可能会帮助许多人转向php 7.2及更高版本),但是我确实有针对your script example的答案,如果不是通用的话,至少可以在这种情况下为您提供帮助。

全面披露:我知道并使用该特定脚本(在PHP 7.2服务器上)。

while (($ut = each($user_tracking)) && ($listed++ < CONFIG_USER_TRACKING_SESSION_LIMIT)) {

应更改为:

foreach ($user_tracking as $ut['value']) {
if ($listed++ >= CONFIG_USER_TRACKING_SESSION_LIMIT) {
  break;
}

查找:

while (($pu = each($ut['value']['last_page_url']))&&($du = each($ut['value']['page_desc']))) {

并更改为:

foreach ($ut['last_page_url'] as $key => $pu) {
          $du = $ut['page_desc'][$key];

确实需要在下面进行一些小的代码重写,因为我们已将数组更改为字符串,但仍然获得了所需的数据。

查找:

<tr bgcolor=ffffff> 
    <td class="dataTableContent" valign=top align="right"><?php echo date('H:i:s', $pu['key']); ?></td> 
    <td class="dataTableContent" nowrap valign=top align="left">&nbsp;<a href="<?php echo $pu['value']; ?>" target="_new"><?php if ($du['value']!=''){ echo $du['value'];} ?></a>&nbsp;</td> 
    <td class="dataTableContent" width=100% align="left"><a href="<?php echo $pu['value']; ?>" target="_new"><?php echo chunk_split($pu['value'],40,"<br>"); ?></a></td> 
</tr>

并更改为:

<tr bgcolor=ffffff> 
    <td class="dataTableContent" valign=top align="right"><?php echo date('H:i:s', $key); ?></td> 
    <td class="dataTableContent" nowrap valign=top align="left">&nbsp;<a href="<?php echo $pu; ?>" target="_new"><?php if ($du!=''){ echo $du;} ?></a>&nbsp;</td> 
    <td class="dataTableContent" width=100% align="left"><a href="<?php echo $pu; ?>" target="_new"><?php echo chunk_split($pu,40,"<br>"); ?></a></td> 
</tr>

希望这会有所帮助。