<?php
$input = [ [1,3], [1,6], [7,8] ];
$available = [6=>0, 1=>1];
//product
$result = array_reduce(array_slice($input, 1), function($c, $x)
{
return call_user_func_array('array_merge',
array_map(function($y) use ($c)
{
return array_map(function($z) use ($y)
{
return array_merge((array)$z, (array)$y);
}, $c);
}, $x)
);
}, current($input));
var_dump($result);
//filter:
$result = array_filter($result, function($tuple) use ($available)
{
foreach(array_count_values($tuple) as $value=>$count)
{
if(isset($available[$value]) && $available[$value]<$count)
{
return false;
}
}
return true;
});
var_dump($result);
preferences:
34.11 ms | 402 KiB | 5 Q