如何找到给定数组的可能子集?

时间:2017-03-09 06:21:05

标签: php mysql codeigniter

我有一张星期表

day_id  |   Day
----------------------
1       |  Monday
2       |  Tuesday
3       |  Wednesday
4       |  Thursday
5       |  Friday
6       |  Saturday
7       |  Sunday

这里我将这个表用于多个用户作为员工的工作日,我希望使用此数组的子集来存储每个用户配置文件。是否还有其他解决方案implode(day_id)

3 个答案:

答案 0 :(得分:2)

该表完全没必要。

一个想法是想象每个工作日的一个明智的表示,其中:

Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Etc

每天的组合可以用1到127之间的单个数字表示。

有关更全面的解释,请参阅Working with bitcode

答案 1 :(得分:0)

使用功能日

如果$ is_number = true则返回第天其他名称日。

function days($is_number = true)
{
        $days       = array();
        $day_number = date("D", time());

        $day            = array(
                        'Mon' => 2 /* 'Monday' */,
                        'Tue' => 3 /* 'Tuesday' */,
                        'Wed' => 4 /* 'Wednesday' */,
                        'Thu' => 5 /* 'Thursday' */,
                        'Fri' => 6 /* 'Friday' */,
                        'Sat' => 0 /* 'Saturday' */,
                        'Sun' => 1 /* 'Sunday' */,
                    );

        $day_name   = array(
                        2 => 'Monday',
                        3 => 'Tuesday',
                        4 => 'Wednesday',
                        5 => 'Thursday',
                        6 => 'Friday',
                        0 => 'Saturday',
                        1 => 'Sunday',
                    );

        $number = isset($day[$day_number]) ? intval($day[$day_number]) : FALSE;

        if($is_number)
                return $number;

        return isset($day_name[$number]) ? $day_name[$number] : FALSE;
}

答案 2 :(得分:0)

试试这个逻辑

function sub_array(array $haystack, array $needle)
{
    return array_intersect_key($haystack, array_flip($needle));
}

$myArray = array(
    'Monday'=> 1,
      'Tuesday'=> 2 ,
      'Wednesday'=> 3 ,
      'Thursday'=> 4  ,
      'Friday'=> 5
);
$keys = array(
    'lettuce',
    'tomato'
);

$ret = sub_array($myArray, $keys);

var_dump($ret);