2016-10-29 2 views
3

ich ein Array haben, die wie folgt aussieht:Split-Array ein assoziatives Array erstellen

a 12 34 
b 12345 
c 123456 

So sieht das Array wie

$array[0] = "a 12 34" 
$array[1] = "b 12345" 
$array[2] = "c 123456" 

Ich versuche, ein assoziatives Array zu erstellen, so dass

[a] => 12 34 
[b] => 12345 
[c] => 123456 

Kann ich das Array möglicherweise in zwei teilen, eins für "a, b, c" und ein anderes für ihren Inhalt und th e array_combine()? Oder gibt es andere Möglichkeiten?

Antwort

0

Sie können das tun geben innerhalb einer Schleife wie das Snippet unten zeigt. Quick-Test here:

 $array  = array("a 12 34", "b 12345", "c 123456"); 
     $array2  = array(); 

     foreach($array as $data){ 
      preg_match("#([a-z])(\s)(.*)#i", $data, $matches); 
      list(, $key, $space, $value) = $matches; 
      $array2[$key] = $value; 
     } 

     var_dump($array2); 
     // YIELDS:: 
     array(3) { 
      ["a"]=> string(5) "12 34" 
      ["b"]=> string(5) "12345" 
      ["c"]=> string(6) "123456" 
     } 

oder eine Mischung aus array_walk() und array_combine() verwendet, die Quick-Tested Here.

 <?php 

      $array  = array("a 12 34", "b 12345", "c 123456"); 
      $keys  = array(); 

      array_walk($array, function(&$data, $key) use (&$keys){ 
       $keys[] = trim(preg_replace('#(\s.*)#i', '', $data));; 
       $data = trim(preg_replace('#(^[a-z])#i', '', $data)); 
      }); 

      $array = array_combine($keys, $array); 

      var_dump($array);; 
      // YIELDS:: 
      array(3) { 
       ["a"]=> string(5) "12 34" 
       ["b"]=> string(5) "12345" 
       ["c"]=> string(6) "123456" 
      } 
0

Sie können es ohne Schwierigkeiten tun :) Eine einfache Schleife ist möglich, es zu tun.

  1. Neues Array
  2. Lopp in jeder Zeile
  3. Split jeweils Daten (explode(' ', $row, 2), strstr, substr, ...)?
  4. Put Daten auf dem neuen Array $array[$key] = $value;
0

$newArr Ihre erwartete Ergebnisse

$array = array(); 
$array[0] = "a 12 34"; 
$array[1] = "b 12345"; 
$array[2] = "c 123456"; 

$newArr = array(); 

foreach($array as $val) { 
    $values = explode(' ', $val, 2); 
    $newArr[$values[0]] = $values[1]; 
} 

print_r($newArr, true); 
0

Sie eine Kombination aus array_map, array_column und array_combine sein kann verwenden:

$array = array_map(function ($v) { return explode(' ', $v, 2); }, $array); 
$array = array_combine(array_column($array, 0), array_column($array, 1));