【发布时间】:2017-12-29 09:35:48
【问题描述】:
解决方案
$hours = array(
'Mo' => array('open' => true, 'from' => '10:00', 'to' => '20:00'),
'Tu' => array('open' => true, 'from' => '10:00', 'to' => '18:00'),
'We' => array('open' => true, 'from' => '10:00', 'to' => '20:00'),
'Th' => array('open' => true, 'from' => '10:00', 'to' => '18:00'),
'Fr' => array('open' => true, 'from' => '10:00', 'to' => '18:00'),
'Sa' => array('open' => true, 'from' => '11:00', 'to' => '16:00'),
'Su' => array('false' => true, 'from' => '11:00', 'to' => '16:00')
);
$res = [];
foreach($hours as $k=>$v) {
if($v['open']){
$t = $v['from'] . ' - ' . $v['to'];
if (! isset($res[$t])) $ret[$t] = [];
$res[$t][] = $k;
}
}
$final = [];
foreach($res as $k=>$v) {
$final[] = implode(', ', $v) . ' ' . $k;
}
echo implode(' ', $final);
已编辑以包含 cmets
试图找到一种解决方案来比较多维数组中的多个值并分组返回匹配的数组键。
示例数组:
$hours = array(
'Mo' => array('open' => true, 'from' => '10:00', 'to' => '20:00'),
'Tu' => array('open' => true, 'from' => '10:00', 'to' => '18:00'),
'We' => array('open' => true, 'from' => '10:00', 'to' => '20:00'),
'Th' => array('open' => true, 'from' => '10:00', 'to' => '18:00'),
'Fr' => array('open' => true, 'from' => '10:00', 'to' => '18:00'),
'Sa' => array('open' => true, 'from' => '11:00', 'to' => '18:00'),
'Su' => array('open' => true, 'from' => '11:00', 'to' => '18:00')
);
因此,上面的示例将导致 Mo & We 被组合在一起,Tu、Th、Fr 被组合在一起,以及 Sa 和 Su > 组合在一起。
我的意图是使用结果来压缩 ld+jason 模式的时间。所需的最终结果将是一个如下所示的字符串:Mo, We 10:00 - 20:00 Tu, Th, Fr 10:00 - 18:00 Sa, Su 11:00 - 16:00 实现此目的的最佳方式?
我查看了数组相交,但这似乎不是我想要的。 (或者至少我不知道如何从我共享的多维数组中获取我需要使用它的结果。这是比较两个数组而不是多维数组的多个级别。
【问题讨论】:
-
您可以将字段'group'添加到数组中的每个项目
-
你将如何使用结果数组? - 设置数组结构?
-
我的目的是使用结果来压缩 ld+jason 模式的时间。所需的最终结果将是一个如下所示的字符串:Mo, We 10:00 - 08:00 Tu, Th, Fr 10:00 - 06:00 Sa, Su 11:00 - 04:00