2016-03-30 16 views
2

Das klingt ziemlich einfach, aber ich kann es nicht funktionieren. Ich versuche, Schlüssel mit demselben Wert zu gruppieren. Ich kann die Schlüsselnummer bekommen, aber ich kann den Namen des Schlüssels nicht bekommen. d. h. "London, Berlin". Dies ist mein Code:So erhalten Sie den Namen eines Schlüssels 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>'; 
} 
+0

Ich verstehe nicht, was der gewünschte Ausgang davon sollte –

+0

Vielleicht suchen Sie dies: http://php.net/man ual/de/function.array-search.php – Ikari

+0

@Dagon Der Name des Schlüssels "London" => "Europa/London". Der gewünschte Ausgang "London". – Avel

Antwort

2

ich schaffen würde vorschlagen, nur die vollständigen Informationen Array Gruppierung zunächst, dass der Schlüssel enthält, die Sie wollen, statt die Präsentation der Erstellung den Schlüssel des ursprünglichen Eingangs abbildet.

Idee:

$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 

Das wichtige Bit ist hier, dass, gruppieren sie in einem Container die als Schlüssel-Ausgleich mit:

$offsets[$offset][] = array(
//  ^reassignment grouping using the offset as key 

Dann in Ihre Präsentation, entscheiden, was Sie wollen:

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

Wenn array_column verfügbar ist, es einfach zu verwenden:

foreach($offsets as $offset => $info) { 
    echo $offset . ' - ' . implode(', ', array_column($info, 'name')) . '<br/>'; 
} 

Sample Output

+0

Bingo! Arbeite wie ein Zauber. Ich habe verschiedene Wege ausprobiert, konnte es aber nicht finden. Vielen Dank. :) – Avel

+0

@Avel sicher, dass dies geholfen – Ghost

1
<?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>'; 
} 

// Ausgabe:

3600: London
10800: Istanbul, Athen
7200: Rom, Berlin

+0

funktioniert entweder auf diese Weise. Vielen Dank. :) – Avel

Verwandte Themen