从字符串到数组的值

时间:2013-10-17 10:35:48

标签: php text

是否可以从STRING获取值:

$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 ...
);

谢谢...

2 个答案:

答案 0 :(得分: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);
?>

答案 1 :(得分: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.