2013-10-17 24 views
0

是從像繩子有可能採取的值:以值從字符串數組

$string = ' * some parameter: A+ * Nextparameter: 0,671 kWh/24h * 
     Some another parameter value: 245 kWh/year * Last parm: 59 kg'; 

現在我知道什麼參數,我需要和有一個列表:

我的參數,我什麼發現(始終是相同的):

$parm1 = "* some parameter:"; 
$parm2 = "* Nextparameter:"; 
$parm3 = "* Some another parameter value:"; 
$parm4 = "* Last parm:"; 

我怎樣才能得到這樣的結果:

$parm1result = "A+"; 
.. etc ... 

或者,最好的辦法:

$result = array(
    "some parameter" => "A+", 
    "Nextparameter" => "0.671", 
    ... etc ... 
); 

謝謝...

+0

可能是巨大的,如果你有一個像「&」,則需要使用正規表示法任何其他方式分隔匹配你需要的任何值 – Carlos

+0

如果你不是真正的通用解決方案,我認爲最簡單的方法是在''''''''''上''爆炸''並'爆炸'該操作的每個部分。 .. – fvu

回答

1

對不起,過去後得到搞砸了。

你需要劃分兩次並應用一些微調:

<?php 
$string = ' * some parameter: A+ * Nextparameter: 0,671 kWh/24h * 
    Some another parameter value: 245 kWh/year * Last parm: 59 kg'; 

// remove beginning and ending stars and whitespace so we don't have empty values 
$string = trim($string, ' *'); 

// get parameters 
$arr = explode('*', $string); 

// trim a little more 
$arr = array_map(trim, $arr); 

// add stuff to array 
$result = array(); 
foreach ($arr as $param) { 
    // nicer way of representing an array of 2 values 
    list($key, $value) = explode(':', $param); 
    $result[trim($key)] = trim($value); 
} 
var_export($result); 
?> 
+0

Thx快速幫助! – Martin

1

因爲獲取參數到一個數組的另一種方式,你可以使用preg_match_all()功能。

然而,這可能是更復雜的(雖然短)的方式來做到這一點:

$params = array(); 
$string = ' * some parameter: A+ * Nextparameter: 0,671 kWh/24h * Some another parameter value: 245 kWh/year * Last parm: 59 kg'; 
if (preg_match_all('/\*\s*([^\:]+):([^\*]+)/', $string, $m) > 0) { 
    foreach ($m[1] as $index => $matches) { 
     $params[trim($matches)] = trim($m[2][$index]); 
    } 
} 

// $params now contains the parameters and values.