我想将可变大小的行添加到结果数组中,具体取决于数组中已有的其他值。
我的脚本:
$today = date("Ymd");
$finalDate = date('Ymd', strtotime('+2 days'));
foreach ($arr as $key => $value) {
if ($value['DTSTART'] <= $finalDate){
$values[] = array(
'day' => $value['DTSTART'],
'type' => $value['SUMMARY;LANGUAGE=en']
);
}
}
类型是这样的:不可回收废物、生物废物等。
我想根据废物类型向数组添加颜色。 我这样尝试过,但它添加了另一个“子数组”。
foreach ($arr as $key => $value) {
if ($value['DTSTART'] <= $finalDate){
$values[] = array(
'day' => $value['DTSTART'],
'type' => $value['SUMMARY;LANGUAGE=en']
);
switch ($value['SUMMARY;LANGUAGE=en']) {
case "Non-recyclable waste":
$values[] = array(
'color' => 'success'
);
break;
case "Bio-waste":
$values[] = array(
'color' => 'success'
);
break;
}
}
}
输入数组:
Array (
[0] => Array (
[DTSTART] => 20210712
[DTEND] => 20210713
[TRANSP] => TRANSPARENT
[LOCATION;LANGUAGE=en] => streetname
[UID] => uid
[DTSTAMP] => 20210707T015623Z
[DESCRIPTION;LANGUAGE=en] => description
[SUMMARY;LANGUAGE=de] => Bio-waste
[PRIORITY] => 9
[CLASS] => PUBLIC [STATUS] => CONFIRMED
)
[1] => Array (
[DTSTART] => 20210726
[DTEND] => 20210727
[TRANSP] => TRANSPARENT
[LOCATION;LANGUAGE=en] => street
[UID] => uid
[DTSTAMP] => 20210707T015623Z
[DESCRIPTION;LANGUAGE=en] => description
[SUMMARY;LANGUAGE=en] => Non-recyclable waste
[PRIORITY] => 9
[CLASS] => PUBLIC
[STATUS] => CONFIRMED
)
)
使用无条件数据(日期和类型)创建项目数组。根据需要添加条件数据(颜色)。将数组推送到主数组。
$values = [];
foreach ($arr as $key => $value)
{
if ($value['DTSTART'] <= $finalDate)
{
$item = array(
'day' => $value['DTSTART'],
'type' => $value['SUMMARY;LANGUAGE=en'],
);
switch ($value['SUMMARY;LANGUAGE=en'])
{
case "Non-recyclable waste":
case "Bio-waste":
$item['color'] = 'success';
break;
// Add more cases.
}
$values[] = $item;
}
}
您可以展开有条件填充的数组,同时为每个推送行声明关联元素。
您当前的流程可以使用
in_array()
而不是 switch()
,但为了更好的可扩展性,也许 match()
是更好的现代技术。
代码:(演示)
$arr = [
['DTSTART' => '2017-01-02', 'SUMMARY;LANGUAGE=en' => 'Non-recyclable waste'],
['DTSTART' => '2017-01-03', 'SUMMARY;LANGUAGE=en' => 'Bio-waste'],
['DTSTART' => '2017-01-04', 'SUMMARY;LANGUAGE=en' => 'Junk'],
];
$finalDate = '2038-12-31';
$result = [];
foreach ($arr as $value) {
if ($value['DTSTART'] > $finalDate) {
continue;
}
$result[] = [
'day' => $value['DTSTART'],
'type' => $value['SUMMARY;LANGUAGE=en'],
...match($value['SUMMARY;LANGUAGE=en']) {
'Non-recyclable waste', 'Bio-waste' => ['color' => 'success'],
default => []
}
];
}
var_export($result);
输出:
array (
0 =>
array (
'day' => '2017-01-02',
'type' => 'Non-recyclable waste',
'color' => 'success',
),
1 =>
array (
'day' => '2017-01-03',
'type' => 'Bio-waste',
'color' => 'success',
),
2 =>
array (
'day' => '2017-01-04',
'type' => 'Junk',
),
)