Heim  >  Artikel  >  Backend-Entwicklung  >  php 从m个数中取n个数组合,超出内存怎么办?

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

WBOY
WBOYOriginal
2016-06-06 20:24:031218Durchsuche

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

<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有几百个元素,执行后超出内存,请问该怎么办?有没有人能帮忙改进下组合的函数,我这方面很弱,不知道怎么做?

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn