0

是否可以从 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 ...
);

谢谢 ...

4

2 回答 2

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);
?>
于 2013-10-17T10:46:57.547 回答
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.
于 2013-10-17T10:50:44.750 回答