【问题标题】:infinite loop in search function for PHP arrayPHP数组的搜索函数中的无限循环
【发布时间】:2021-05-20 08:00:05
【问题描述】:

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

“致命错误:Out of memory (allocated 178257920) (尝试分配 262144 bytes) in ... on line 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;

显示有 4 个“pro8”的 json 文件

[
    {
        "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"
            }

        }
    }
]

如何解决这个无限循环?

【问题讨论】:

    标签: php loops search


    【解决方案1】:

    无限循环来自这个语句:

    $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++;
    

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2013-08-28
      相关资源
      最近更新 更多