加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

有没有办法在纯PHP中检测循环数组?

发布时间:2022-09-30 05:32:42 所属栏目:PHP教程 来源:未知
导读: 有趣的方法(我知道它是愚蠢的:)),但你可以修改它并跟踪递归元素的“路径”。这只是一个想法:)根据序列化字符串的属性,递归何时开始于 将与原始数组的字符串相同。如您所见 - 我在许多不

有趣的方法(我知道它是愚蠢的:)),但你可以修改它并跟踪递归元素的“路径”。这只是一个想法:)根据序列化字符串的属性,递归何时开始于 将与原始数组的字符串相同。如您所见 - 我在许多不同的变体上尝试过它,并且可能是能够“愚弄”它的东西,但它“检测”了所有列出的递归。我没有尝试使用对象的递归数组。

$a = array('b1'=>'a1','b2'=>'a2','b4'=>'a3','b5'=>'R:1;}}}');
$a['a1'] = &$a;
$a['b6'] = &$a;
$a['b6'][] = array(1,2,&$a);
$b = serialize($a); 
print_r($a);
function WalkArrayRecursive(&$array_name, &$temp){
    if (is_array($array_name)){
        foreach ($array_name as $k => &$v){
           if (is_array($v)){
                if (strpos($temp, preg_replace('#R:\d+;\}+$#', '', 
                               serialize($v)))===0) 
                { 
                  echo "\n Recursion detected at " . $k ."\n"; 
                  continue; 
                }
                WalkArrayRecursive($v, $temp);
            }
        }
    }
}
WalkArrayRecursive($a, $b);

正则表达式适用于具有递归的元素位于数组的“末尾”的情况。而且,是的php循环,这种递归与整个数组有关。可以对子元素进行递归,但是现在考虑它们为时已晚。不知何故,数组的每个元素都应该检查其子元素中的递归。同样的方式,如上所述,通过print_r函数的输出,或在序列化字符串中查找要递归的特定记录(类似如下)。跟踪应该从该元素开始,通过我的脚本比较下面的所有内容。所有这一切都只是当你想要检测递归开始的位置,而不仅仅是你是否拥有它。R:4;}

ps:但最好的事情应该是,正如我所认为的,从php本身创建的seleized字符串编写自己的非序列化函数。

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!