PHP 7.2:每个都已弃用。如何转换这些例子?
PHP 7.2: each is deprecated. How to convert these examples?
在 PHP 7.2 中,each
已弃用。 The documentation 说:
Warning This function has been DEPRECATED as of PHP 7.2.0. Relying on this function is highly discouraged.
如何更新我的代码以避免使用它?以下是一些示例:
while ($x = each($y) {
while (($x = each($y)) && ($a = each($b))) {
我认为在这些情况下我需要使用 foreach
,但我不确定如何正确使用它。我已经在 Whosebug 和其他网站上检查了很多示例,但是 none 示例的构造类似于上面的 2.
编辑
如果可能的话,我正在寻找这些 while
行的通用插入式代码替换(仅一行或几行代码),不需要完整的 script/application 因上述改动重写
谢谢
这是处理示例 #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 ];
}
我知道您正在为这 2 个 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"> <a href="<?php echo $pu['value']; ?>" target="_new"><?php if ($du['value']!=''){ echo $du['value'];} ?></a> </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"> <a href="<?php echo $pu; ?>" target="_new"><?php if ($du!=''){ echo $du;} ?></a> </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>
希望对您有所帮助。
在 PHP 7.2 中,each
已弃用。 The documentation 说:
Warning This function has been DEPRECATED as of PHP 7.2.0. Relying on this function is highly discouraged.
如何更新我的代码以避免使用它?以下是一些示例:
while ($x = each($y) {
while (($x = each($y)) && ($a = each($b))) {
我认为在这些情况下我需要使用 foreach
,但我不确定如何正确使用它。我已经在 Whosebug 和其他网站上检查了很多示例,但是 none 示例的构造类似于上面的 2.
编辑
如果可能的话,我正在寻找这些 while
行的通用插入式代码替换(仅一行或几行代码),不需要完整的 script/application 因上述改动重写
谢谢
这是处理示例 #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 ];
}
我知道您正在为这 2 个 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"> <a href="<?php echo $pu['value']; ?>" target="_new"><?php if ($du['value']!=''){ echo $du['value'];} ?></a> </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"> <a href="<?php echo $pu; ?>" target="_new"><?php if ($du!=''){ echo $du;} ?></a> </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>
希望对您有所帮助。