2017-08-02 38 views
3

这是最初的字符串: -如何从字符串中获取关联数组?

NAME=Marco\nLOCATION=localhost\nSECRET=fjsdgfsjfdskffuv=\n 

这是我的解决方案虽然“=”的字符串的结束并不阵列

$env = file_get_contents(base_path() . '/.env'); 

    // Split string on every " " and write into array 
    $env = preg_split('/\s+/', $env); 

    //create new array to push data in the foreach 
    $newArray = array(); 

    foreach($env as $val){ 

     // Split string on every "=" and write into array 
     $result = preg_split ('/=/', $val); 

     if($result[0] && $result[1]) 
     { 
      $newArray[$result[0]] = $result[1]; 
     } 

    } 

    print_r($newArray); 

这似乎是结果我得到:

Array ([Name] => Marco [LOCATION] => localhost [SECRET] => fjsdgfsjfdskffuv) 

但我需要:

Array ([Name] => Marco [LOCATION] => localhost [SECRET] => fjsdgfsjfdskffuv=) 
+0

http://php.net/manual/en/function.parse-url.php尝试使用此功能 – Zeljka

+0

这是我得到的parse_url()函数:Array([path] => NAME = Marco_LOCATION = localhost_SECRET = fjsdgfsjfdskffuv = _) – Marco

+0

@仍然死我没有降级你的答案。你为什么要这样对我的问题呢? – Marco

回答

2

可以使用使preg_split的极限参数,使其只分裂一次

http://php.net/manual/en/function.preg-split.php

你应该改变

$result = preg_split ('/=/', $val); 

$result = preg_split ('/=/', $val, 2); 

希望这有助于

字符串
+0

谢谢@Dimitris Filippou。那就是诀窍。 – Marco

0
$string = 'NAME=Marco\nLOCATION=localhost\nSECRET=fjsdgfsjfdskffuv=\n'; 
$strXlate = [ 'NAME='  => '"NAME":"'  , 
       'LOCATION=' => '","LOCATION":"', 
       'SECRET=' => '","SECRET":"' , 
       '\n'  => ''    ]; 
$jsonified = '{'.strtr($string, $strXlate).'"}'; 
$array  = json_decode($jsonified, true); 

这是使用strtr函数的效率根据1)翻译(),制备JSON格式的阵列,然后使用吹送它很好地成阵列的json_decode ...

同样的结果,另一种方法...

0

您也可以使用parse_str来将URL语法字符串解析为名称 - 值对。

根据您的例子:

$newArray = []; 

$str = file_get_contents(base_path() . '/.env'); 
$env = explode("\n", $str); 

array_walk(
    $env, 
    function ($i) use (&$newArray) { 
     if (!$i) { return; } 
     $tmp = []; 
     parse_str($i, $tmp); 
     $newArray[] = $tmp; 
    } 
); 

var_dump($newArray); 

当然,你需要把一些健全性检查的功能,因为它可以像空字符串键,和诸如此类的东西值的数组中插入一些奇怪的东西。

相关问题