Heim >Backend-Entwicklung >PHP-Tutorial >php自定义方法,如何求出一个数组中由三个元素组成的不重复数据

php自定义方法,如何求出一个数组中由三个元素组成的不重复数据

WBOY
WBOYOriginal
2016-07-06 13:52:501097Durchsuche

举例说明
数组如下 :
[123,345,567,1235,6435,77,33,444,555,666,111,999,19,101,5542]

要求出所有用这个数组中的元素(三个)组成出的所有组合,组合例如下

123,345,567
1235,6435,77
33,444,555
666,111,999
111,999,19
。。。
n多种组合,每个组合是不重复(可以有这种情况 123,345,567 345,123,567即顺序不同)的

回复内容:

举例说明
数组如下 :
[123,345,567,1235,6435,77,33,444,555,666,111,999,19,101,5542]

要求出所有用这个数组中的元素(三个)组成出的所有组合,组合例如下

123,345,567
1235,6435,77
33,444,555
666,111,999
111,999,19
。。。
n多种组合,每个组合是不重复(可以有这种情况 123,345,567 345,123,567即顺序不同)的

示例:

<code><?php $data = [123, 345, 567, 1235, 6435, 77, 33, 444, 444, 123, 555, 666, 111, 999, 19, 101, 5542];

// 生成
$items = generate($data);
foreach ($items as $item) {
    echo implode("\t", $item) . PHP_EOL;
}

function generate($data)
{
    // 排序
    sort($data);

    // 去重
    $data = array_unique($data);
    $data = array_values($data);

    // 打印原始字符串
    echo implode(", ", $data) . PHP_EOL . PHP_EOL;

    $items = [];
    for ($i = 0; $i < count($data); $i++) {
        for ($j = 0; $j < count($data); $j++) {
            if ($j == $i) {
                continue;
            }
            for ($k = 0; $k < count($data); $k++) {
                if ($k == $j || $k == $i) {
                    continue;
                }
                $items[] = [$data[$i], $data[$j], $data[$k]];
            }
        }
    }

    return $items;
}</code></code>

楼上是全组合,我加个全排列

https://3v4l.org/n4ZXT

参考:全排列和全组合实现

求解,哪位老大帮帮忙

<code><?php function getCombinationToString($arr, $m) {
    if ($m == 1) {
       return $arr;
    }
    $result = [];
    
    $tmpArr = $arr;
    unset($tmpArr[0]);
    for($i = 0; $i < count($arr); $i++) {
        $s = $arr[$i];
        $ret = getCombinationToString(array_values($tmpArr), ($m - 1), $result);
        foreach($ret as $row) {
            $val = $s . ',' . $row;
            $val = explode(',', $val);
            sort($val);
            $val = implode(',', $val);
            if(! in_array($s, explode(',', $row)) && ! in_array($val, $result)) {
                $result[] = $val;
            }
        }
    }   
  return $result;
}

$arr = [123, 345, 567, 1235, 6435, 77, 33, 444, 555, 666, 111, 999, 19, 101, 5542];

$t = getCombinationToString($arr, 3);
echo '<pre class="brush:php;toolbar:false">';print_r($t);</code>
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