PHP массив: как найти все ключи в массиве, передав несколько значений?

Это мое решение с 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]]
1
задан wtfowned 18 March 2019 в 20:08
поделиться

3 ответа

Вы можете фильтровать массив ( array_filter ):

$output = array_filter($haystack, function ($v) use ($needle) {
    return in_array($v, $needle);
});
0
ответ дан Roman Bobrik 18 March 2019 в 20:08
поделиться

Я считаю, array_intersect - это то, что вам нужно.

array_intersect () возвращает массив, содержащий все значения array1, присутствующие во всех аргументах. Обратите внимание, что ключи сохранены.

Обратите внимание, что сравнение чувствительно к регистру.

Таким образом, вы можете преобразовать массив в нижний регистр, а затем выполнить 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));

0
ответ дан rishipuri 18 March 2019 в 20:08
поделиться

Я бы просто использовал простую функцию, которую все поймут. Для меня это легко и элегантно.

function getFragArray($arrayValues, $arrayKey) {
    $resu = [];
    foreach ($arrayValues as $key=>$value) {
        if(in_array($value,$arrayKey)) {
            $resu[$key] = $value;
        }
    }

    return $resu;
}
0
ответ дан Kvasir 18 March 2019 в 20:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: