Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据不同的值对数组进行排序_Php_Arrays_Sorting - Fatal编程技术网

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