2017-02-03 1 views
1

Désolé pour le très mauvais titre, je ne suis pas un locuteur natif et je ne savais pas trop comment le dire.Obtenir des valeurs uniques à partir d'un tableau avec un filtrage spécifique

Voici mon problème:

J'ai une très longue série avec ce format:

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

A partir de ce tableau, je voudrais obtenir un autre avec ce format:

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

J'ai essayé quelques méthodes mais je n'ai vraiment pas trouvé de solution qui ne soit pas très longue, donc je me demandais si je pouvais trouver des trucs et astuces pour y arriver facilement!

Merci beaucoup!

+0

vous pouvez essayer d'utiliser 'in_array (string, $ array);' – Laurence

Répondre

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

j'ai vois que seulement créer un niveau de 1 seconde? Pourrait être? –

+1

@ Álvaro Touzón cela devrait donner au gars le format dont il a besoin. – JustBaron

+0

Fonctionne parfaitement! Merci beaucoup! – Fawak

0

essayez ceci:

$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; 
} 

Attendez-vous aide. TKS

+0

$ val ou $ valeur à modifier – JustBaron

0

solution courte en utilisant la fonction explode():

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

print_r($transformed); 

La sortie:

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

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

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