【问题标题】:Delete keys of an array if its values exists in previous keys如果数组的值存在于先前的键中,则删除数组的键
【发布时间】:2019-01-30 20:20:41
【问题描述】:
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”中,在这种情况下,我们删除(取消设置)0 1 4 1。我将如何对所有元素执行此操作。并组合数组键的大小。希望你能理解

【问题讨论】:

  • 为了确保我理解正确,您想删除整个“0 1 4 1”数组,因为它的值“0 1”存在于“0 1 0 5”数组中?如果是这样的话,为什么我们不删除“0 1 0 5”数组,因为它的一些值存在于“0 0 0 4”数组中?
  • 您好先生,谢谢您的回答。是的,我们需要从第一个数组开始,然后从最后一个到第一个进行比较,如果下一个值在前一个中,则删除它(下一个)。等等

标签: php arrays sorting combinations


【解决方案1】:

如果我正确理解您的目的,这是通过使用array_intersect() 过滤集合数组的一种方法。只有当当前集合与前一个集合的交集为空时,过滤器回调才应返回 true。

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

答案第一部分的代码显示了如何删除与前面的单个数组具有共同值的每个数组。如果您需要删除与之前数组中的 any 具有共同值的集合,我会这样做:

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

【讨论】:

  • 谢谢您,先生,您给了我一个想法。使用数组相交来比较下一个和所有以前的数组是否具有共同值。我会尝试使用它。谢谢!!!
  • 哦,所有个以前的数组?我误会了,我以为你的意思只是前面那个。
  • 是的,需要比较之前所有的键,反正我会用array_intersect函数
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2012-03-22
  • 2018-09-12
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多