Maison > développement back-end > tutoriel php > 请教一个php中二维数组元素组合的算法

请教一个php中二维数组元素组合的算法

WBOY
Libérer: 2016-06-06 20:27:34
original
1491 Les gens l'ont consulté

<code>$arr = array(
    array('a','b','c'),
    array('c','f'),
    array('g','z'),
    array('x','y')
);
//$arr子集元素长度可能会多一些
//将$arr的子集元素与$arr其他子集元素两两组合或者三三四四组合
//子集array('a','b','c')中的元素不需要组合
//两两组合
$newarr = array(
  array('a','c'),
  array('a','f'),
  array('b','c'),
  array('b','f'),
  array('c','c'),
  array('c','f'),
  ……
)
//三三组合
$newarr = array(
  array('a','c','g'),
  array('a','f','g'),
  array('b','c','g'),
  array('b','f','g'),
  array('c','c','g'),
  array('c','f','g'),
  ……
)
//四四组合
$newarr = array(
  array('a','c','g','x'),
  array('a','f','g','x'),
  array('b','c','g','x'),
  array('b','f','g','x'),
  array('c','c','g','x'),
  array('c','f','g','x'),
  ……
)</code>
Copier après la connexion
Copier après la connexion

用一个函数可以实现吗?

<code>//$arr:原始数组,$cNum:组合长度
function getCombination($arr,$cNum){
  ……
}</code>
Copier après la connexion
Copier après la connexion

回复内容:

<code>$arr = array(
    array('a','b','c'),
    array('c','f'),
    array('g','z'),
    array('x','y')
);
//$arr子集元素长度可能会多一些
//将$arr的子集元素与$arr其他子集元素两两组合或者三三四四组合
//子集array('a','b','c')中的元素不需要组合
//两两组合
$newarr = array(
  array('a','c'),
  array('a','f'),
  array('b','c'),
  array('b','f'),
  array('c','c'),
  array('c','f'),
  ……
)
//三三组合
$newarr = array(
  array('a','c','g'),
  array('a','f','g'),
  array('b','c','g'),
  array('b','f','g'),
  array('c','c','g'),
  array('c','f','g'),
  ……
)
//四四组合
$newarr = array(
  array('a','c','g','x'),
  array('a','f','g','x'),
  array('b','c','g','x'),
  array('b','f','g','x'),
  array('c','c','g','x'),
  array('c','f','g','x'),
  ……
)</code>
Copier après la connexion
Copier après la connexion

用一个函数可以实现吗?

<code>//$arr:原始数组,$cNum:组合长度
function getCombination($arr,$cNum){
  ……
}</code>
Copier après la connexion
Copier après la connexion

递归?

<code class="php">$arr = array(
    array('a', 'b', 'c'),
    array('c', 'f'),
    array('g', 'z'),
    array('x', 'y')
);

//$arr:原始数组,$cNum:组合长度
function getCombination($arr, $cNum) {
    if ($cNum === 0) {
        return return array(
            array('a'),
            array('b'),
            array('c'),
        );
    } else {
        $tmpArr2 = $arr;
        $resultArr = array();
        array_pop($tmpArr2);
        $lastNewArr = getCombination($tmpArr2, $cNum - 1);
        for ($i = 0; $i </code>
Copier après la connexion

呃……我目前的想法是先取符合组合长度规定的数组,再求笛卡尔积,最后合并成新数组……
三个函数完成。

题主的问题应该是 PHP计算二维数组笛卡尔积 吧?如果是的话,请看以下代码:

<code>class Descartes
{
    public $sourceArray;
    public $resultArray;

    public function __construct($array, $result)
    {
        $this->sourceArray = $array;
        $this->resultArray = $result;
    }

    public function calcDescartes($arrIndex, $arrResult)
    {
        if ($arrIndex >= count($this->sourceArray)) {
            array_push($this->resultArray, $arrResult);
            return ;
        }

        $currentArray = $this->sourceArray[$arrIndex];
        $currentArrayCount = count($currentArray);
        $arrResultCount = count($arrResult);

        for ($i = 0; $i calcDescartes($arrIndex + 1, $currentArraySlice);
        }
    }

}

$example = [
    ['a', 'b', 'c'],
    ['c', 'f'],
    ['g', 'z'],
    ['x', 'y']
];

$result = [];

$descartes = new Descartes($example, $result);
$descartes->calcDescartes(0, $result);

var_dump($descartes->resultArray);
</code>
Copier après la connexion
Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal