Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数each()被折旧,但foreach循环不是';t正确转换_Php - Fatal编程技术网

Php 函数each()被折旧,但foreach循环不是';t正确转换

Php 函数each()被折旧,但foreach循环不是';t正确转换,php,Php,我继承的这个网站正在被转移到PHP7.0环境中,在运行兼容性检查器(作为WP)之后,我发现了几个错误,其中使用了.each()来代替foreach()循环。但是,我从来没有使用过.each()循环,在查看了一些文档和stackoverflows之后,我只是不想对其进行转换。我想知道是否有人能帮我弄清楚这件事。从代码来看,我唯一真正看到的是,$k是数组位置的指示?所以,我想如果我试着把它设为一个数字,让它递增 原始代码 我的尝试 忘记了循环中的内容,您必须用foreach循环替换while循环,该

我继承的这个网站正在被转移到PHP7.0环境中,在运行兼容性检查器(作为WP)之后,我发现了几个错误,其中使用了.each()来代替foreach()循环。但是,我从来没有使用过.each()循环,在查看了一些文档和stackoverflows之后,我只是不想对其进行转换。我想知道是否有人能帮我弄清楚这件事。从代码来看,我唯一真正看到的是,
$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;   
            }
    }