Php 函数each()被折旧,但foreach循环不是';t正确转换
我继承的这个网站正在被转移到PHP7.0环境中,在运行兼容性检查器(作为WP)之后,我发现了几个错误,其中使用了.each()来代替foreach()循环。但是,我从来没有使用过.each()循环,在查看了一些文档和stackoverflows之后,我只是不想对其进行转换。我想知道是否有人能帮我弄清楚这件事。从代码来看,我唯一真正看到的是,Php 函数each()被折旧,但foreach循环不是';t正确转换,php,Php,我继承的这个网站正在被转移到PHP7.0环境中,在运行兼容性检查器(作为WP)之后,我发现了几个错误,其中使用了.each()来代替foreach()循环。但是,我从来没有使用过.each()循环,在查看了一些文档和stackoverflows之后,我只是不想对其进行转换。我想知道是否有人能帮我弄清楚这件事。从代码来看,我唯一真正看到的是,$k是数组位置的指示?所以,我想如果我试着把它设为一个数字,让它递增 原始代码 我的尝试 忘记了循环中的内容,您必须用foreach循环替换while循环,该
$k
是数组位置的指示?所以,我想如果我试着把它设为一个数字,让它递增
原始代码
我的尝试
忘记了循环中的内容,您必须用foreach循环替换while循环,该循环使用each将
数组中$的每个元素的键指定给$k
while ( list($k,$v) = each($in) ) {
foreach ( $in as $key => $val ) {
// Some code here
};
};
应该是这样的:
foreach ( $in as $k => $v ) {
foreach ( $in as $key => $val ) {
// Some code here
};
};
在原始代码中,while循环获取数组第一个元素的键和值,将其分配给变量$k
和$v
,将数组光标移动到下一个元素,并计算块内的代码。它会重复,直到元素不存在为止。如前所示,您可以对foreach执行相同的操作。尝试更改此代码时,真正的问题不是来自$k
,而是来自行
$in[] =& $in[$k][$key];.
while
循环使用数组$in
作为一种队列。这是一种常见的递归实现,不使用递归函数。
只有组合到while/for/do while
循环的每个
才能允许此操作,而不是foreach。
我唯一的建议是忽略警告或使用递归函数。如果您担心有一天每个函数都会被删除,那么不用担心每个函数都太简单而无法构建:
if(!function_exists('each')){
function each(&$array){
if(is_array($array)){
$key=key($array);
if($key!==null&&$key!==false){
next($array);
return array($array[$key],$key);
}
return false;
}elseif(is_object($array)&&key_exists('Traversable',class_implements($array))){
if($array->valid()){
$current=$array->current();
$key=$array->key();
$array->next($array);
return array($current,$key);
}
return false;
}
return false;
}
}
这看起来不像是应该移植的代码。它应该从规范中销毁并重写。快速查看,似乎\u sanitize\u data\u array
真正做的就是返回数组(array\u filter($submitted\u data))代码>(至少当$submitted\u data是数组时,$\u POST总是应该是数组)。好的,我没有看到递归不适用于foreach。谢谢你,我现在将忽略警告,但作为测试,请尝试这段代码。不幸的是,最初的开发人员正在为来自另一个数据库的SQL合并数据创建导入,但没有注释或文档,所以我只能猜测。如果这有效,我会接受答案!我的自定义每个函数都非常有效。。。别忘了把你的问题标记为已解决。。。
$in[] =& $in[$k][$key];.
if(!function_exists('each')){
function each(&$array){
if(is_array($array)){
$key=key($array);
if($key!==null&&$key!==false){
next($array);
return array($array[$key],$key);
}
return false;
}elseif(is_object($array)&&key_exists('Traversable',class_implements($array))){
if($array->valid()){
$current=$array->current();
$key=$array->key();
$array->next($array);
return array($current,$key);
}
return false;
}
return false;
}
}