我有一个二维数组:
$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],
];
我试图单独使用子数组,并将整个数组切成碎片,但是所有这些都是以循环的堆形式获得的。看起来像带有气味的代码。 应该有一个简单的解决方案吗?
有什么想法吗?
答案 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',
];
它可能会更快,因为涉及的迭代次数会更少。再说一次,可能不是。但是,处理超过一列宽的砖仍然很尴尬。