Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Your IP : 3.145.81.47
<?php
namespace Mpdf\Utils;
class Arrays
{
public static function get($array, $key, $default = null)
{
if (is_array($array) && array_key_exists($key, $array)) {
return $array[$key];
}
if (func_num_args() < 3) {
throw new \InvalidArgumentException(sprintf('Array does not contain key "%s"', $key));
}
return $default;
}
/**
* Returns an array of all k-combinations from an input array of n elements, where k equals 1..n.
* Elements will be sorted and unique in every combination.
*
* Example: array[one, two] will give:
* [
* [one],
* [two],
* [one, two]
* ]
* @param array $array
* @return array
*/
public static function allUniqueSortedCombinations($array)
{
$input = array_unique($array);
if (count($input) <= 1) {
return [$input];
}
sort($input);
$combinations = [];
foreach ($input as $value) {
$combinations[] = [$value];
}
$n = count($input);
for ($k = 2; $k <= $n; $k++) {
$combinations = array_merge($combinations, self::combinations($input, $k));
}
return $combinations;
}
/**
* Returns an array of unique k-combinations from an input array.
*
* Example: array=[one, two, three] and k=2 will give:
* [
* [one, two],
* [one, three]
* ]
* @param array $array
* @param int $k
* @return array
*/
public static function combinations($array, $k)
{
$n = count($array);
$combinations = [];
$indexes = range(0, $k - 1);
$maxIndexes = range($n - $k, $n - 1);
do {
$combination = [];
foreach ($indexes as $index) {
$combination[] = $array[$index];
}
$combinations[] = $combination;
$anotherCombination = false;
$resetFromIndex = -1;
for ($i = $k - 1; $i >= 0; $i--) {
if ($indexes[$i] < $maxIndexes[$i]) {
$indexes[$i]++;
$anotherCombination = true;
break;
}
$resetFromIndex = $i;
}
if ($resetFromIndex > 0) {
for ($i = $resetFromIndex; $i < $k; $i++) {
$indexes[$i] = $indexes[$i - 1] + 1;
}
}
} while ($anotherCombination);
return $combinations;
}
}
|