Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Oop_Datetime - Fatal编程技术网

Php 如何在一个列表中显示具有相同时间的国家

Php 如何在一个列表中显示具有相同时间的国家,php,arrays,oop,datetime,Php,Arrays,Oop,Datetime,我有以下代码: public function parse_timezones_list($timezones = '') { global $lang, $core; if(!is_array($timezones) || is_empty($timezones)) { $timezones = array('UTC', 'Africa/Casablanca', 'Africa/Dakar', 'Africa/Abidjan', 'Europe/Paris

我有以下代码:

   public function parse_timezones_list($timezones = '') {
    global $lang, $core;
    if(!is_array($timezones) || is_empty($timezones)) {
        $timezones = array('UTC', 'Africa/Casablanca', 'Africa/Dakar', 'Africa/Abidjan', 'Europe/Paris', 'Africa/Lagos', 'Africa/Algiers', 'Africa/Tunis', 'Africa/Cairo', 'Asia/Beirut', 'Asia/Amman', 'Africa/Nairobi', 'Asia/Riyadh', 'Asia/Tehran', 'Asia/Dubai', 'Asia/Hong_Kong');
    }
    $gmttime = gmmktime(gmdate('H'), gmdate('i'), gmdate('s'), gmdate('n'), gmdate('d'), gmdate('Y'));
    $timezones_list.='<ul class="list-group">';
    foreach($timezones as $timezone) {
        $timezone_obj = new DateTimeZone($timezone);
        $time_obj = new DateTime('now', $timezone_obj);
        $timezone_city = str_replace('_', ' ', explode('/', $timezone));
        if(empty($timezone_city[1])) {
            $timezone_city[1] = $timezone_city[0];
        }
        $timezones_list .= '<li class="list-group-item">'.$lang->sprint($lang->timecity, date('H:i', $gmttime + $timezone_obj->getOffset($time_obj)), ucwords($timezone_city[1])).'</li>';
    }
    $timezones_list.='</ul>';
    return $timezones_list;
}
结果是:UTC时间14:45 卡萨布兰卡时间14:45 达喀尔时间14:45 阿比让时间14:45 巴黎时间16:45 拉各斯时间15:45 阿尔及尔时间15:45 突尼斯时间15:45 开罗时间16:45

我想表明,对于每一个在同一行中有相同时间的国家,例如这里我想要这样:卡萨布兰卡时间14:45,达喀尔时间,阿比让时间


感谢您的帮助

我不是100%理解这个问题,但此代码将地点分组到各自的时区:

$timezones = array('Africa/Casablanca', 'Africa/Dakar', 'Africa/Abidjan', 'Europe/Paris', 'Africa/Lagos', 'Africa/Algiers', 'Africa/Tunis', 'Africa/Cairo', 'Asia/Beirut', 'Asia/Amman', 'Africa/Nairobi', 'Asia/Riyadh', 'Asia/Tehran', 'Asia/Dubai', 'Asia/Hong_Kong');
$locations = array();
foreach ($timezones as $timezone) {
    $dateTime = new DateTime(); 
    $dateTime->setTimeZone(new DateTimeZone($timezone)); 
    $locations[$dateTime->format('T')][] = $timezone;
}
它使用$locations创建一个数组,其中包含时区键和区域值。输出类似于:

Array
(
    [WET] => Array
        (
            [0] => Africa/Casablanca
        )

    [GMT] => Array
        (
            [0] => Africa/Dakar
            [1] => Africa/Abidjan
        )

    [CEST] => Array
        (
            [0] => Europe/Paris
        )

    [WAT] => Array
        (
            [0] => Africa/Lagos
        )
)

什么时候同一时间?马上顺便说一句,最好在标签中列出您的语言-这将比数组、函数或oop更相关。是的,现在,我的意思是,我不需要显示每个国家的时间,我不需要显示每个国家有相同的时间在一起@JonSkeetUse数组将他们分组$时区['14:45'][]=$timezone替换14:45当然是动态的。你能给我写代码吗?请感谢你@decezez注意,如果适合你的使用情况:如果你要求用户选择他们的时区,例如作为首选项设置,分组就不行了。时区现在可能是相同的时间,但由于DST的原因会出现分歧。