> 백엔드 개발 > PHP 튜토리얼 > php自定义方法,如何求出一个数组中由三个元素组成的不重复数据

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

WBOY
풀어 주다: 2016-07-06 13:52:50
원래의
1097명이 탐색했습니다.

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