php - 用 prev 值填充空数组点
问题描述
我正在使用PHP 7.3.5
.
我有一个带有空点的数组,我想填充上一个点的值:
例如:
0 => 'FriAug 1',
1 => '',
2 => '',
3 => '',
4 => '',
应该导致:
0 => '01.08.2019',
1 => '01.08.2019',
2 => '01.08.2019',
3 => '01.08.2019',
4 => '01.08.2019',
我尝试了以下方法:
<?php
$arr = array (
0 => 'FriAug 1',
1 => '',
2 => '',
3 => '',
4 => '',
5 => '',
6 => '',
7 => '',
8 => '',
9 => '',
10 => '',
11 => '',
12 => '',
13 => '',
14 => '',
15 => '',
16 => '',
17 => '',
18 => '',
19 => 'SatNov 2',
20 => 'SunNov 3',
21 => '',
22 => '',
23 => '',
24 => '',
25 => '',
26 => 'MonJan 4',
27 => '',
28 => '',
29 => '',
30 => '',
31 => '',
32 => '',
33 => '',
34 => '',
35 => '',
36 => '',
37 => '',
38 => '',
39 => '',
40 => '',
41 => '',
42 => '',
43 => '',
44 => '',
45 => 'TueDec 5',
46 => '',
47 => '',
48 => '',
49 => '',
50 => '',
51 => '',
52 => '',
53 => '',
54 => '',
55 => '',
56 => '',
57 => '',
58 => '',
59 => '',
60 => '',
61 => '',
62 => 'WedNov 6'
);
$resArr = array();
foreach ($arr as $key => $v) {
$prev = $key - 1;
if($arr[$key] === '') {
array_push($resArr, strtotime(preg_replace("^.{0,3}","", $arr[$prev])));
} else {
array_push($resArr, strtotime(preg_replace("^.{0,3}","", $arr[$key])));
}
}
print_r($resArr);
我的最终结果应如下所示:
// Wanted Result:
0 => '01.08.2019',
1 => '01.08.2019',
2 => '01.08.2019',
3 => '01.08.2019',
4 => '01.08.2019',
5 => '01.08.2019',
6 => '01.08.2019',
7 => '01.08.2019',
8 => '01.08.2019',
9 => '01.08.2019',
10 => '01.08.2019',
11 => '01.08.2019',
12 => '01.08.2019',
13 => '01.08.2019',
14 => '01.08.2019',
15 => '01.08.2019',
16 => '01.08.2019',
17 => '01.08.2019',
18 => '01.08.2019',
19 => '02.11.2019',
20 => '03.11.2019',
21 => '03.11.2019',
22 => '03.11.2019',
23 => '03.11.2019',
24 => '03.11.2019',
25 => '03.11.2019',
26 => '04.11.2019',
27 => '04.11.2019',
28 => '04.11.2019',
29 => '04.11.2019',
30 => '04.11.2019',
31 => '04.11.2019',
32 => '04.11.2019',
33 => '04.11.2019',
34 => '04.11.2019',
35 => '04.11.2019',
36 => '04.11.2019',
37 => '04.11.2019',
38 => '04.11.2019',
39 => '04.11.2019',
40 => '04.11.2019',
41 => '04.11.2019',
42 => '04.11.2019',
43 => '04.11.2019',
44 => '04.11.2019',
45 => '05.12.2019',
46 => '05.12.2019',
47 => '05.12.2019',
48 => '05.12.2019',
49 => '05.12.2019',
50 => '05.12.2019',
51 => '05.12.2019',
52 => '05.12.2019',
53 => '05.12.2019',
54 => '05.12.2019',
55 => '05.12.2019',
56 => '05.12.2019',
57 => '05.12.2019',
58 => '05.12.2019',
59 => '05.12.2019',
60 => '05.12.2019',
61 => '05.12.2019',
62 => '06.11.2019'
);
但是,我只null/false
在最终输出中获得值。
有什么建议我做错了吗?
感谢您的回复!
解决方案
问题之一是使用正则表达式 - 您的模式不正确 - 但由于它只是删除前面的 3 个字符,因此更容易substr()
删除它们。
第二部分是你只看源数组中的前一个数组位置——它也可能是空白的。此版本仅存储生成的最后一个值(在 中$prev
)并在需要时继续使用它...
$resArr = array();
$prev = "";
foreach ($arr as $key => $v) {
if($arr[$key] === '') {
array_push($resArr, $prev);
} else {
$prev = date("d.m.Y",strtotime(substr($arr[$key], 3)));
array_push($resArr, $prev);
}
}
这可以在不失去太多清晰度的情况下简化...
$resArr = array();
$prev = "";
foreach ($arr as $key => $v) {
if($arr[$key] !== '') {
$prev = date("d.m.Y",strtotime(substr($arr[$key], 3)));
}
array_push($resArr, $prev);
}
推荐阅读
- ruby - IRB 与 unicode 崩溃
- laravel - 基于关系的 Eloquent 查询
- spring - 多线程 Executor 通道加速消费者进程
- ios - iOS 蓝牙连接弹窗
- html - HTML 中 XXE 攻击的基本工作示例
- css - Css / React 语音气泡小部件
- python - RuntimeError:使用 Flask 和 Flask-Migrate 在应用程序上下文之外工作
- python - 如何创建一个将熊猫列传递给它的函数?
- php - 如何在 laravel 5.8 中合并两个 sql 表
- cassandra - Cassandra sstableloader 加载表快照“无法连接”失败