Это мое решение с 10 строками:
class Solution(object):
def permute_unique(self, nums):
perms = [[]]
for n in nums:
new_perm = []
for perm in perms:
for i in range(len(perm) + 1):
new_perm.append(perm[:i] + [n] + perm[i:])
# handle duplication
if i < len(perm) and perm[i] == n: break
perms = new_perm
return perms
if __name__ == '__main__':
s = Solution()
print s.permute_unique([1, 1, 1])
print s.permute_unique([1, 2, 1])
print s.permute_unique([1, 2, 3])
--- Результат ----
[[1, 1, 1]]
[[1, 2, 1], [2, 1, 1], [1, 1, 2]]
[[3, 2, 1], [2, 3, 1], [2, 1, 3], [3, 1, 2], [1, 3, 2], [1, 2, 3]]
Вы можете фильтровать массив ( array_filter ):
$output = array_filter($haystack, function ($v) use ($needle) {
return in_array($v, $needle);
});
Я считаю, array_intersect - это то, что вам нужно.
array_intersect () возвращает массив, содержащий все значения array1, присутствующие во всех аргументах. Обратите внимание, что ключи сохранены.
blockquote>Обратите внимание, что сравнение чувствительно к регистру.
Таким образом, вы можете преобразовать массив в нижний регистр, а затем выполнить array_intersect для них,
$haystack = [ 11 => 'Parenting', 48 => 'How', 50 => 'Parenting', 54 => 'parenting', 57 => 'parenting', 58 => 'style', 59 => 'that', 60 => 'offers', 61 => 'kids', 62 => 'greater', 63 => 'freedom', ]; $needle = ['Parenting', 'offer', 'freedom']; $result = array_intersect(array_map('strtolower', $haystack), array_map('strtolower', $needle));
Я бы просто использовал простую функцию, которую все поймут. Для меня это легко и элегантно.
function getFragArray($arrayValues, $arrayKey) {
$resu = [];
foreach ($arrayValues as $key=>$value) {
if(in_array($value,$arrayKey)) {
$resu[$key] = $value;
}
}
return $resu;
}