2017-08-02 36 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); 

當然,你需要把一些健全性檢查的功能,因爲它可以像空字符串鍵,和諸如此類的東西值的數組中插入一些奇怪的東西。

相關問題