> 백엔드 개발 > PHP 튜토리얼 > php 从m个数中取n个数组合,超出内存怎么办?

php 从m个数中取n个数组合,超出内存怎么办?

WBOY
풀어 주다: 2016-06-06 20:24:03
원래의
1266명이 탐색했습니다.

下面是我网上找到的代码:

<code>function getCombinationToString($arr,$m)
{
    $result = array();
    if ($m ==1)
    {
        return $arr;
    }

    if ($m == count($arr))
    {
        $result[] = implode(',' , $arr);
        return $result;
    }

    $temp_firstelement = $arr[0];
    unset($arr[0]);
    $arr = array_values($arr);
    $temp_list1 = getCombinationToString($arr, ($m-1));

    foreach ($temp_list1 as $s)
    {
        $s = $temp_firstelement.','.$s;
        $result[] = $s;
    }
    unset($temp_list1);

    $temp_list2 = getCombinationToString($arr, $m);
    foreach ($temp_list2 as $s)
    {
        $result[] = $s;
    }
    unset($temp_list2);

    return $result;
}
</code>
로그인 후 복사
로그인 후 복사
<code>$arr=['a','b','c','d','e','f'];
getCombinationToString($arr,3);</code>
로그인 후 복사
로그인 후 복사

输出结果:

Array
(

<code>[0] => a,b,c
[1] => a,b,d
[2] => a,b,e
[3] => a,b,f
[4] => a,c,d
[5] => a,c,e
[6] => a,c,f
[7] => a,d,e
[8] => a,d,f
[9] => a,e,f
[10] => b,c,d
[11] => b,c,e
[12] => b,c,f
[13] => b,d,e
[14] => b,d,f
[15] => b,e,f
[16] => c,d,e
[17] => c,d,f
[18] => c,e,f
[19] => d,e,f</code>
로그인 후 복사
로그인 후 복사

)
现在我的$arr有几百个元素,执行后超出内存,请问该怎么办?有没有人能帮忙改进下组合的函数,我这方面很弱,不知道怎么做?

回复内容:

下面是我网上找到的代码:

<code>function getCombinationToString($arr,$m)
{
    $result = array();
    if ($m ==1)
    {
        return $arr;
    }

    if ($m == count($arr))
    {
        $result[] = implode(',' , $arr);
        return $result;
    }

    $temp_firstelement = $arr[0];
    unset($arr[0]);
    $arr = array_values($arr);
    $temp_list1 = getCombinationToString($arr, ($m-1));

    foreach ($temp_list1 as $s)
    {
        $s = $temp_firstelement.','.$s;
        $result[] = $s;
    }
    unset($temp_list1);

    $temp_list2 = getCombinationToString($arr, $m);
    foreach ($temp_list2 as $s)
    {
        $result[] = $s;
    }
    unset($temp_list2);

    return $result;
}
</code>
로그인 후 복사
로그인 후 복사
<code>$arr=['a','b','c','d','e','f'];
getCombinationToString($arr,3);</code>
로그인 후 복사
로그인 후 복사

输出结果:

Array
(

<code>[0] => a,b,c
[1] => a,b,d
[2] => a,b,e
[3] => a,b,f
[4] => a,c,d
[5] => a,c,e
[6] => a,c,f
[7] => a,d,e
[8] => a,d,f
[9] => a,e,f
[10] => b,c,d
[11] => b,c,e
[12] => b,c,f
[13] => b,d,e
[14] => b,d,f
[15] => b,e,f
[16] => c,d,e
[17] => c,d,f
[18] => c,e,f
[19] => d,e,f</code>
로그인 후 복사
로그인 후 복사

)
现在我的$arr有几百个元素,执行后超出内存,请问该怎么办?有没有人能帮忙改进下组合的函数,我这方面很弱,不知道怎么做?

那就不要存啊,生成一个输出一个便可以了

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿