Php 根据不同的值对数组进行排序
假设你有一系列的天数和开店时间,比如:Php 根据不同的值对数组进行排序,php,arrays,sorting,Php,Arrays,Sorting,假设你有一系列的天数和开店时间,比如: Array ( [monday] => Array ( [day] => Monday [isopen] => true [open] => 10:00 [close] => 17:00 ) [tuesday] => Array ( [d
Array
(
[monday] => Array
(
[day] => Monday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[tuesday] => Array
(
[day] => Tuesday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[wednesday] => Array
(
[day] => Wednesday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[thursday] => Array
(
[day] => Thursday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[friday] => Array
(
[day] => Friday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[saturday] => Array
(
[day] => Saturday
[isopen] => false
[open] => 11:00
[close] => 14:00
)
[sunday] => Array
(
[day] => Sunday
[isopen] => false
[open] => 01:00
[close] => 01:00
)
)
monday - friday: 10:00-17:00
saturday-sunday: closed
现在,我想对这些婴儿进行如下分类:
Array
(
[monday] => Array
(
[day] => Monday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[tuesday] => Array
(
[day] => Tuesday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[wednesday] => Array
(
[day] => Wednesday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[thursday] => Array
(
[day] => Thursday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[friday] => Array
(
[day] => Friday
[isopen] => true
[open] => 10:00
[close] => 17:00
)
[saturday] => Array
(
[day] => Saturday
[isopen] => false
[open] => 11:00
[close] => 14:00
)
[sunday] => Array
(
[day] => Sunday
[isopen] => false
[open] => 01:00
[close] => 01:00
)
)
monday - friday: 10:00-17:00
saturday-sunday: closed
如果说星期三16:00结束,我希望输出:
monday-tuesday: 10:00-17:00
wednesday: 10:00-16:00
thursday-friday: 10:00-17:00
saturday-sunday: closed
也就是说,我想对它们进行排序,但仍然保持从上到下的顺序作为主要排序。那么,你会怎么做呢?循环它们,在内存中保留小时,比较天数是一种选择,但没有更好的解决方案吗
编辑:
请求了一个实际阵列,如下所示:
$days = array(
'monday' => array(
'day' => 'Monday',
'isopen' => true,
'open' => '10:00',
'close' => '17:00',
),
'tuesday' => array(
'day' => 'Tuesday',
'isopen' => true,
'open' => '10:00',
'close' => '17:00',
),
'wednesday' => array(
'day' => 'Wednesday',
'isopen' => true,
'open' => '10:00',
'close' => '17:00',
),
'thursday' => array(
'day' => 'Thursday',
'isopen' => true,
'open' => '10:00',
'close' => '17:00',
),
'friday' => array(
'day' => 'Friday',
'isopen' => true,
'open' => '10:00',
'close' => '17:00',
),
'saturday' => array(
'day' => 'Saturday',
'isopen' => false,
'open' => '10:00', //Not used since isopen = false
'close' => '17:00', //Not used since isopen = false
),
'sunday' => array(
'day' => 'Sunday',
'isopen' => false,
'open' => '10:00', //Not used since isopen = false
'close' => '17:00', //Not used since isopen = false
)
);
这很棘手,但并非不可能(请注意,这是一种合并,而不是排序): 比如:
$newArray = array();
$dayCount = -1;
foreach ($days as $day) {
if ( ($dayCount < 0) ||
($day['isopen'] != $newArray[$dayCount]['isopen']) ||
($day['open'] != $newArray[$dayCount]['open']) ||
($day['close'] != $newArray[$dayCount]['close']) ) {
$newArray[++$dayCount] = array_merge(
$day,
array('dayTo' => '')
);
} else {
$newArray[$dayCount]['dayTo'] = $day['day'];
}
}
var_dump($newArray);
如果您在“关闭”日有不匹配的open
和close
值,则将If
条件更改为
if ( ($dayCount < 0) ||
($day['isopen'] != $newArray[$dayCount]['isopen']) ||
($day['isopen'] && (($day['open'] != $newArray[$dayCount]['open']) ||
($day['close'] != $newArray[$dayCount]['close']) ))) {
if($dayCount<0)|
($day['isopen']!=$newArray[$dayCount]['isopen'])||
($day['isopen']&&($day['open']!=$newArray[$dayCount]['open'])||
($day['close']!=$newArray[$dayCount]['close'])){
可能有帮助这不是“排序”数组,而是“合并”数组条目,并且没有任何内置函数可以为您执行此操作,因此您基本上需要在数组中循环检查值并手动合并它们。我想我可以回答您的问题,但是…您发布了var_转储的数据,我无法只抓取、粘贴到IDE中并播放…我太懒了,无法将其转换回php。抱歉。正如@georg所说,我想我对此有一个答案,但为了让我们帮助你,你必须帮助我们帮助你,如果这有任何意义的话。当然,我现在添加了它。我的意图不是让你们为我写,但我当然希望看到你们的代码!:)我喜欢这个解决方案。它不是,无论如何,“组”关闭日期。也就是说,它在数组中得到3个值,而它应该是2个值;“dayTo”应该是“星期六”的“星期日”。否则这太棒了。我的测试运行确实从您发布的数组中给出了“星期六”的“星期日”的
dayTo
。