Удалить ключи массива, если его значения существуют в предыдущих ключах - PullRequest
0 голосов
/ 30 января 2019
Array
(
    [0 0 0 4] => Array
        (
            [0] => 0 0
            [1] => 0 1
            [2] => 0 2
            [3] => 0 3
            [4] => 0 4
        )

    [0 1 0 5] => Array
        (
            [0] => 0 1
            [1] => 0 2
            [2] => 0 3
            [3] => 0 4
            [4] => 0 5
        )

    [0 1 4 1] => Array
        (
            [0] => 0 1
            [1] => 1 1
            [2] => 2 1
            [3] => 3 1
            [4] => 4 1
        )

    [0 2 0 5] => Array
        (
            [0] => 0 2
            [1] => 0 3
            [2] => 0 4
            [3] => 0 5
        )

    [0 2 0 6] => Array
        (
            [0] => 0 2
            [1] => 0 3
            [2] => 0 4
            [3] => 0 5
            [4] => 0 6
        )

    [0 3 1 4] => Array
        (
            [0] => 0 3
            [1] => 0 4
            [2] => 1 3
            [3] => 1 4
        )

    [0 3 3 3] => Array
        (
            [0] => 0 3
            [1] => 1 3
            [2] => 2 3
            [3] => 3 3
        )

    [0 3 4 3] => Array
        (
            [0] => 0 3
            [1] => 1 3
            [2] => 2 3
            [3] => 3 3
            [4] => 4 3
        )

    [0 5 1 6] => Array
        (
            [0] => 0 5
            [1] => 0 6
            [2] => 1 5
            [3] => 1 6
        )

    [0 5 4 5] => Array
        (
            [0] => 0 5
            [1] => 1 5
            [2] => 2 5
            [3] => 3 5
            [4] => 4 5
        )

    [0 6 3 6] => Array
        (
            [0] => 0 6
            [1] => 1 6
            [2] => 2 6
            [3] => 3 6
        )

    [0 6 4 6] => Array
        (
            [0] => 0 6
            [1] => 1 6
            [2] => 2 6
            [3] => 3 6
            [4] => 4 6
        )

    [1 0 2 1] => Array
        (
            [0] => 1 0
            [1] => 1 1
            [2] => 2 0
            [3] => 2 1
        )

    [1 1 4 1] => Array
        (
            [0] => 1 1
            [1] => 2 1
            [2] => 3 1
            [3] => 4 1
        )

    [1 1 5 1] => Array
        (
            [0] => 1 1
            [1] => 2 1
            [2] => 3 1
            [3] => 4 1
            [4] => 5 1
        )

    [1 2 5 2] => Array
        (
            [0] => 1 2
            [1] => 2 2
            [2] => 3 2
            [3] => 4 2
            [4] => 5 2
        )

    [1 4 2 5] => Array
        (
            [0] => 1 4
            [1] => 1 5
            [2] => 2 4
            [3] => 2 5
        )

    [1 5 5 5] => Array
        (
            [0] => 1 5
            [1] => 2 5
            [2] => 3 5
            [3] => 4 5
            [4] => 5 5
        )

    [2 1 2 5] => Array
        (
            [0] => 2 1
            [1] => 2 2
            [2] => 2 3
            [3] => 2 4
            [4] => 2 5
        )

    [2 2 2 5] => Array
        (
            [0] => 2 2
            [1] => 2 3
            [2] => 2 4
            [3] => 2 5
        )

    [2 2 2 6] => Array
        (
            [0] => 2 2
            [1] => 2 3
            [2] => 2 4
            [3] => 2 5
            [4] => 2 6
        )

    [2 2 3 3] => Array
        (
            [0] => 2 2
            [1] => 2 3
            [2] => 3 2
            [3] => 3 3
        )

    [2 2 5 2] => Array
        (
            [0] => 2 2
            [1] => 3 2
            [2] => 4 2
            [3] => 5 2
        )

    [2 5 5 5] => Array
        (
            [0] => 2 5
            [1] => 3 5
            [2] => 4 5
            [3] => 5 5
        )

    [3 0 3 3] => Array
        (
            [0] => 3 0
            [1] => 3 1
            [2] => 3 2
            [3] => 3 3
        )

    [3 0 3 4] => Array
        (
            [0] => 3 0
            [1] => 3 1
            [2] => 3 2
            [3] => 3 3
            [4] => 3 4
        )

    [3 1 4 2] => Array
        (
            [0] => 3 1
            [1] => 3 2
            [2] => 4 1
            [3] => 4 2
        )

    [3 4 4 5] => Array
        (
            [0] => 3 4
            [1] => 3 5
            [2] => 4 4
            [3] => 4 5
        )

    [4 5 5 6] => Array
        (
            [0] => 4 5
            [1] => 4 6
            [2] => 5 5
            [3] => 5 6
        )

)

например, это мой мульти-массив, и каждый ключ (0 1 0 5, 0 1 4 1) имеет свои значения.Я хочу сделать комбинацию из набора удаляемых ключей, если их значения существуют в предыдущих массивах ключей.

Например: ключ "0 1 4 1" имеет значение "0 1", которое существует в предыдущем ключе "0 1 0 5«в этом случае мы удаляем (unset) 0 1 4 1.Как я буду делать это для всех элементов.И составьте комбинации размеров ключей массива.Я надеюсь, вы понимаете это

1 Ответ

0 голосов
/ 31 января 2019

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

$result = array_filter($sets, function($set) {
    static $previous = [];
    $matches = array_intersect($set, $previous);
    $previous = $set;
    return !$matches;
});

Код в первой части ответа показывает, как удалить каждый массив, имеющийзначения, общие с предыдущим единственным массивом.Если вам нужно удалить наборы, которые имеют общие значения с любым из предыдущих массивов, я бы сделал это следующим образом:

$result = array_filter($sets, function($set) {
    static $previous = [];
    foreach ($set as $value) {
        if (isset($previous[$value])) $matches = true;
        $previous[$value] = true;
    }
    return empty($matches);
});
...