PHP检查数组是否包含另一个数组(二维)

时间:2019-01-23 00:44:31

标签: php

我有一个二维数组:

$wall = [
    [1, 0, 1, 1, 0, 1],
    [1, 1, 1, 1, 1, 1],
    [1, 1, 1, 1, 1, 1],
    ];

$brick1 = [
    [1, 1],
    [1, 1]
];

$brick2 = [
    [1],
    [1],
    [1],
];

我想找出$ wall是否包含$ brick1或$ brick2数组,如果是,则将它们从$ wall中删除。

输出应该得到类似的东西

$wall = [
    [1, 0, 0, 1, 0, 1],
    [0, 0, 0, 1, 1, 1],
    [0, 0, 0, 1, 1, 1],
    ];

我试图单独使用子数组,并将整个数组切成碎片,但是所有这些都是以循环的堆形式获得的。看起来像带有气味的代码。 应该有一个简单的解决方案吗?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在您给出的示例中,$brick1不应进行超过十次迭代(两次或更少的迭代),$brick2不应进行超过五次迭代(三或更少的迭代)迭代)。

这是按比例缩小的真实示例吗?没错,涉及很多周期,但是在这种规模上可以忽略不计。迭代的数量无关紧要,只要足够快即可。你做过基准测试吗?

我唯一想到的另一件事是将列转换为字符串,然后在字符串上使用str_replace()strtr(),然后将其转换回数组。

所以:

$wall = [
    [1, 0, 0, 1, 0, 1],
    [0, 0, 0, 1, 1, 1],
    [0, 0, 0, 1, 1, 1],
];

成为:

$wallStr = [
    '100',
    '000',
    '000',
    '111',
    '011',
    '111',
];

它可能会更快,因为涉及的迭代次数会更少。再说一次,可能不是。但是,处理超过一列宽的砖仍然很尴尬。