请教一个 PHP 数组填充的算法

2020-04-19 06:07:51 +08:00
 54dev

条件,已知三个数组

数组 1 中有固定值

数组 2,数组 3 长度不定,
把数组 2,数组 3 的数据填充到数组 1 来生成一个长度等于max(数组 2,数组 3)新的数组

例如

$arr1 = ['bot','bot2','',''];
$arr2 = ['size1','size2'];
$arr3 = ['a','b','c'];

生成的新数组是:

array(
    0 => array('bot','bot2','size1','a'),
    1 => array('bot','','size2','b'),
    2 => array('bot','','','c'),
);
2785 次点击
所在节点    PHP
4 条回复
ysc3839
2020-04-19 07:01:38 +08:00
```
function myfunc($arr1, $arr2, $arr3) {
$first = array_shift($arr1);
return array_map(function(...$arr) use ($first) {
foreach ($arr as &$value) {
if ($value == null) $value = '';
}
array_unshift($arr, $first);
return $arr;
}, $arr1, $arr2, $arr3);
}

$arr1 = ['bot','bot2','',''];
$arr2 = ['size1','size2'];
$arr3 = ['a','b','c'];

var_dump(myfunc($arr1, $arr2, $arr3));
```

result:
array(3) {
[0]=>array(4) {
[0]=>string(3) "bot"
[1]=>string(4) "bot2"
[2]=>string(5) "size1"
[3]=>string(1) "a"
}
[1]=>array(4) {
[0]=>string(3) "bot"
[1]=>string(0) ""
[2]=>string(5) "size2"
[3]=>string(1) "b"
}
[2]=>array(4) {
[0]=>string(3) "bot"
[1]=>string(0) ""
[2]=>string(0) ""
[3]=>string(1) "c"
}
}
54dev
2020-04-19 07:35:33 +08:00
@ysc3839 非常感谢,能说一下思路吗,这个闭包没看懂:)
ysc3839
2020-04-19 07:44:40 +08:00
根据你给的输入和输出,猜测是把 $arr1[0] 去除,然后 $arr1-3 看作矩阵的行进行转置,再把 $arr1[0] 插入第一列。
把数组第一个元素去掉可以使用 array_shift 。
矩阵转置可以使用两层循环,但是经过搜索发现使用 array_map 也可以实现转置,而且会自动补齐缺失的元素。但是自动补的是 null,所以预先处理一下,把 null 替换成 '',最后把 $arr1[0] 插入到开头即可。
54dev
2020-04-19 08:00:26 +08:00
@ysc3839 谢谢,您的思路是对的。我给的例子不太清楚,数组元素很多,还要用的递归和自增,应该需要使用两层循环

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663885

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX