cvooc

PHP数组操作内存耗尽问题

PHP 数组内存耗尽问题

现象

目前在 php7.1 的开发中遇到一个问题,一个递归函数调用时,向临时数组添加数据,位置不同会导致内存耗尽.

function _get_uid_children($p_company_id,$rows){
    $cids = [];
    // // 放在这里就会提示内存耗尽,why?暂不明白,赶时间后续研究
    // $cids[] = $p_company_id;
    foreach($rows as $v){
        if($v['parentid'] == $p_company_id || strpos($v['plugin_parentid_auth'],','.$p_company_id.',')){
            $cids[] = $v['id'];
        }
    }
    foreach($cids as $v){
        $cids = array_merge($cids, _get_uid_children($v,$rows));
    }
    // 放在这里就OK
    $cids[] = $p_company_id;
    return $cids;
}

当 push 操作放在报错位置时会提示内存耗尽


 Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)

原因

事后两天重新查看这个问题,反应过来了,因为这是一个递归操作,我在递归前将参数赋值进了临时变量中,在后续的

$cids = array_merge($cids, _get_uid_children($v,$rows));

调用时又重新传入造成了无限递归,当时的确是脑袋浆糊了.这种蠢问题都没发现,居然还写了这个 markdown 记下来. 这个 markdown 就不删了,留下来提醒我敲代码时一定要静心,不然一急躁就会忽视一些很明显的问题. 特此警示!