Home > Backend Development > PHP Tutorial > PHP custom method, how to find unique data composed of three elements in an array

PHP custom method, how to find unique data composed of three elements in an array

WBOY
Release: 2016-07-06 13:52:50
Original
1097 people have browsed it

An example of the
array is as follows:
[123,345,567,1235,6435,77,33,444,555,666,111,999,19,101,5542]

It is necessary to find all the combinations composed of the elements (three) in this array. The combinations are as follows

123, 345, 567
1235,6435,77
33,444,555
666,111,999
111,999,19
. . .
n Multiple combinations, each combination is non-repeating (this can be the case 123, 345, 567 345, 123, 567, that is, the order is different)

Reply content:

An example of the
array is as follows:
[123,345,567,1235,6435,77,33,444,555,666,111,999,19,101,5542]

It is necessary to find all the combinations composed of the elements (three) in this array. The combinations are as follows

123, 345, 567
1235,6435,77
33,444,555
666,111,999
111,999,19
. . .
n Multiple combinations, each combination is non-repeating (this can be the case 123, 345, 567 345, 123, 567, that is, the order is different)

Example:

<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>
Copy after login

The whole combination is upstairs, I will add a full arrangement

https://3v4l.org/n4ZXT

Reference: Full arrangement and full combination implementation

Please tell me, can anyone help me

<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>
Copy after login
Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template