[英]How to get the name of a key in array
這聽起來很簡單,但我無法使其正常工作。 我正在嘗試將具有相同值的鍵分組。 我可以獲取密鑰號,但是無法獲取密鑰的名稱。 即“倫敦,柏林”。 這是我的代碼:
$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>';
}
我建議先創建包含所需鍵的完整信息數組分組,而不要創建映射原始輸入鍵的演示文稿。
理念:
$offsets = array(); // initialize
foreach($countries as $key => $country_offset) { // grouping
$offset = timezone_offset_get( new DateTimeZone( $country_offset ), new DateTime() );
$offsets[$offset][] = array(
'name' => $key, // include me instead!
'offset' => $offset,
'timezome' => $country_offset,
);
}
ksort($offsets); // sort
這里重要的一點是,使用偏移量作為鍵將它們分組在一個容器內:
$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/>';
}
如果可用array_column
,則只需使用它:
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>';
}
//輸出:
3600:倫敦
10800年:伊斯坦布爾,雅典
7200年:羅馬,柏林
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.