PHP 数组的搜索函数中的无限循环

infinite loop in search function for PHP array

作为练习,我需要创建一个搜索功能。在此函数中,输入是一个值,输出是该值在数组中重复的次数。但错误显示:

“致命错误:内存不足(已分配 178257920)(已尝试分配 262144 字节)在...第 51 行”

PHP代码为:


        //here is first part of search function.
    class searching extends JsonHelper {
        public $s = 0;
        public function search($index) {
            $temp = $this->myarray;
            $s = $this->s;
            foreach ($temp as $value) {
                if(!is_array($value)) {
                    if ($value == $index) {
                        echo "i found something";
                        $s += 1;
                    } else {
                        continue;
                    }
                } else {
                    $this->searchB($value, $index , $temp);
                }
            }
        }
        //secend part of search for arrays that are deeper
        function searchB($A, $B, $C) {
            $s = $this->s;foreach ($A as $AA){
                if (!is_array($AA)) {
                    if ($AA == $B) {
                        echo "i found something";
                        $s += 1;
                    } else {
                    }
                } else {
                    $this->searchB($A, $B, $C); //line 51 is here
                }
            }
            
        }
    }
    $object = new searching("jsonProject.json");
    echo $object->search("pro8");
    echo $object->s;
    $object->s = 0;

json 文件显示有 4 个“pro8”

[
    {
        "id": 1,
        "Client": "client 1",
        "Project": "project 1",
        "StartDate": "2018\/11\/02 16:57:35",
        "CompletedDate": "",
        "projectUrl": "project-1",
        "pro": {
            "pro2": "pro8",
            "pro4": "pro8",
            "pro6":
            {
                "pro7": "pro8",
                "pro9": "pro8"
            }

        }
    }
]

如何解决这个死循环?

无限循环来自这个语句:

$this->searchB($A, $B, $C); //line 51 is here

你指向同一个变量 $A 而不是 $AA 我想你想要这个:

$this->searchB($AA, $B, $C); //line 51 is here

还有一件事

$s += 1;

不会改变

$this->s

最好只使用

$this->s += 1;

甚至更好

$this->s++;