2017-02-03 6 views
1

Sorry über den ziemlich schlechten Titel, ich bin kein Muttersprachler und war mir nicht sicher, wie man das ausdrücken soll.Erhalten Sie einzigartige Werte von Array mit spezifischen Filtern

Hier ist mein Problem:

ich eine sehr lange Reihe mit diesem Format haben:

$array = array(
    'key1.value1' => '1', 
    'key1.value2' => '0', 
    'key1.value3' => '1', 
    'key2.value1' => '0', 
    'key2.value2' => '0', 
    'key3.value1' => '1' 
); 

Von diesem Array, ich möchte ein anderes mit diesem Format erhalten:

$newArray = array(
    'key1' => array(
     'value1' => '1', 
     'value2' => '0', 
     'value3' => '1' 
    ), 
    'key2' => array(
     'value1' => '0', 
     'value2' => '0' 
    ), 
    'key3' => array(
     'value1' => '1' 
    ) 
); 

Ich habe ein paar Methoden ausprobiert, aber wirklich keine Lösung gefunden, die nicht extrem lang ist, also fragte ich mich, ob ich irgendwelche Tipps/Tricks könnte, um dies leicht zu erledigen!

Vielen Dank!

+0

Sie versuchen können, verwenden 'in_array (string, $ array);' – Laurence

Antwort

1
$array = array(
    'key1.value1' => '1', 
    'key1.value2' => '0', 
    'key1.value3' => '1', 
    'key2.value1' => '0', 
    'key2.value2' => '0', 
    'key3.value1' => '1' 
); 

$Results = array(); 
foreach($array as $key=>$value){ 
    $KeyValue = explode(".",$key); 
    if(!isset($Results[$KeyValue[0]])){ 
     $Results[$KeyValue[0]] = array(); 
    } 
    $Results[$KeyValue[0]][end($KeyValue)] = $value; 
} 
print_r($Results); 
+0

ich, dass nur sehen, habe Erstellen Sie eine 1 zweite Ebene ?. Könnte sein? –

+1

@ Álvaro Touzón das sollte dem Kerl das Format geben, das er braucht. – JustBaron

+0

Funktioniert perfekt! Danke vielmals! – Fawak

0

versuchen Sie dies:

$generate = []; 
foreach($array as $key=>$val){ 
list($first, $second) = split('.', $key); 
if(!isset($genrate[$first]){ 
$genrate[$first] = []; 
if(!$genrate[$first][$second]){ 
$genrate[$first][$second]= []; 
} 
} 
$genrate[$first][$second] = $val; 
} 

Erwarten, dass es hilft. Tks

+0

$ val oder $ value muss geändert werden – JustBaron

0

Short-Lösung explode() Funktion:

$transformed = []; 
foreach ($array as $k => $v) { 
    $pair = explode('.', $k); 
    $transformed[$pair[0]][$pair[1]] = $v; 
} 

print_r($transformed); 

Der Ausgang:

Array 
(
    [key1] => Array 
     (
      [value1] => 1 
      [value2] => 0 
      [value3] => 1 
     ) 

    [key2] => Array 
     (
      [value1] => 0 
      [value2] => 0 
     ) 

    [key3] => Array 
     (
      [value1] => 1 
     ) 
) 
Verwandte Themen