Php 如何获取数组中键的名称

Php 如何获取数组中键的名称,php,arrays,implode,array-unique,array-key,Php,Arrays,Implode,Array Unique,Array Key,这听起来很简单,但我不能让它工作。我正在尝试将具有相同值的键分组。我可以得到钥匙号码,但我不能得到钥匙的名字。i、 e“伦敦,柏林”。 这是我的代码: $countries = array ( 'London' => 'Europe/London', 'Istanbul' => 'Europe/Istanbul', 'Rome' => 'Europe/Rome', 'Berlin' => 'Europe/Berlin', 'Athens' =

这听起来很简单,但我不能让它工作。我正在尝试将具有相同值的键分组。我可以得到钥匙号码,但我不能得到钥匙的名字。i、 e“伦敦,柏林”。 这是我的代码:

$countries = array (
   'London' => 'Europe/London',
   'Istanbul' => 'Europe/Istanbul',
   'Rome' => 'Europe/Rome',
   'Berlin' => 'Europe/Berlin',
   'Athens' => 'Europe/Athens',
);


$offsets = Array();
foreach ($countries as $country_offset) {
   $offset = timezone_offset_get( new DateTimeZone( $country_offset ), new DateTime() );

   array_push($offsets, $offset);
}

$result = array_unique($offsets);
asort($result);

$keys = array_keys($result);
foreach($keys as $key) {
   $numb = array_keys($offsets, $offsets[$key]);

   echo $offsets[$key] . ' - ' . implode(', ', $numb ) . '<br>';
}
$countries=数组(
“伦敦”=>“欧洲/伦敦”,
“伊斯坦布尔”=>“欧洲/伊斯坦布尔”,
“罗马”=>“欧洲/罗马”,
“柏林”=>“欧洲/柏林”,
“雅典”=>“欧洲/雅典”,
);
$offset=Array();
foreach($country作为$country\u抵销){
$offset=timezone\u offset\u get(new DateTimeZone($country\u offset),new DateTime());
阵列推送($offset,$offset);
}
$result=array_unique($offset);
asort($结果);
$keys=数组_键($result);
foreach($key作为$key){
$numb=数组_键($offset,$offset[$key]);
回显$offset[$key].-'.内爆(',',$numb)。'
'; }
我建议首先创建包含所需键的完整信息数组分组,而不是创建映射原始输入键的表示

想法:

这里重要的一点是,使用偏移量作为密钥将它们分组到容器中:

$offsets[$offset][] = array(
//       ^ reassignment grouping using the offset as key
然后,在您的演示中,决定您想要什么:

// presentation
foreach($offsets as $offset => $info) {
    echo $offset . ' - ';
    $temp = array();
    foreach($info as $t) {
        $temp[] = $t['name'];
    }
    echo implode(', ', $temp);
    echo '<br/>';
}

我不明白这个的期望输出应该是什么也许你在找这个:@Dagon钥匙的名字
'London'=>'Europe/London'
。所需的输出
London
。您无法再从输出映射关键点,您已将其转换为另一种形式,只需创建另一个包含所有相关数据的容器,以便您可以拥有所有信息。孔输出类似于此
7200-2,3
。我想做的是用名字来代替索引号,即
7200-罗马,柏林
Bingo!效验如神我试过不同的方法,但找不到这种方法。非常感谢。:)@阿维尔当然很高兴这对他有帮助。非常感谢。:)
// presentation
foreach($offsets as $offset => $info) {
    echo $offset . ' - ';
    $temp = array();
    foreach($info as $t) {
        $temp[] = $t['name'];
    }
    echo implode(', ', $temp);
    echo '<br/>';
}
foreach($offsets as $offset => $info) {
    echo $offset . ' - ' . implode(', ', array_column($info, 'name')) . '<br/>';
}
 <?php
$countries = array (
   'London' => 'Europe/London',
   'Istanbul' => 'Europe/Istanbul',
   'Rome' => 'Europe/Rome',
   'Berlin' => 'Europe/Berlin',
   'Athens' => 'Europe/Athens',
);

$out=array();
foreach ($countries as $country_offset=>$c) {
   $offset = timezone_offset_get( new DateTimeZone( $c ), new DateTime() );


$out[$offset][]=$country_offset;
}
//print_r($out);

foreach($out as $x=>$y){

echo $x.': '.implode(',',$y).'<br>';
}