从php中的爆炸字符串中获取值

时间:2017-09-26 08:13:38

标签: php arrays string explode

我有自定义cms数据库并从数据库获取参数,我的结果是:

$param = 'param1="value1"|param2="value2"|param3="value3"|param4="value4"|param5="value5"'

但我需要获取param1值或其他值。我尝试使用爆炸但我的结果是:

$string = explode('|',$param);

结果:

array (size=4)
    0 => string 'param1="value1"' 
    1 => string 'param2="value2"' 
    2 => string 'param3="value3"' 
    3 => string 'param4="value4"'
    4 => string 'param5="value4"' 

我需要获得这种格式的价值:

$param->param1 = value1;

6 个答案:

答案 0 :(得分:1)

您还需要在=上展开每个子字符串,然后将结果映射到数组中:

$param = 'param1="value1"|param2="value2"|param3="value3"|param4="value4"|param5="value5"';

$params = explode('|', $param);

$results = [];

foreach ($params as $element) {
  list($key, $value) = explode('=', $element, 2);
  $results[$key] = json_decode($value);
}

echo $results['param1']; // value1

json_decode的调用可能看起来有些不合适,但它是将引用字符串转换为本机PHP字符串的最快方法。第二个explode调用的附加参数是将结果限制为两个变量,以防值本身包含等号。

答案 1 :(得分:0)

使用一个小的正则表达式很好很容易:

$param = 'param1="value1"|param2="value2"|param3="value3"|param4="value4"|param5="value5"';
$strings = explode('|', $param);
foreach ($strings as $string) {
    preg_match('#param\d="(?<value>.+)"#', $string, $matches);
    var_dump($matches['value']);
}

正则表达式#param\d="(?<value>.+)"#查找param,后跟一个数字,然后是等号,我们在括号中创建一个named capture group ?<value>

var_dumps的输出如下所示:

string(6) "value1" 
string(6) "value2" 
string(6) "value3" 
string(6) "value4" 
string(6) "value5"

在这里试试https://3v4l.org/bomO7

答案 2 :(得分:0)

当您使用“|”拆分第一个部分时,您可以转换其余部分,就好像它是一个带有“=”作为分隔符的CSV字段。这涉及报价和其他元素。

<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );

$param = 'param1="value1"|param2="value2"|param3="value3"|param4="value4"|param5="value5"';
$parms = explode('|', $param );
$values = [];
foreach ( $parms as $parm ) {
    list($key, $value) = str_getcsv($parm, "=");
    $values[$key] = $value;
}
print_r($values);

答案 3 :(得分:0)

$param = 'param1="value1"|param2="value2"|param3="value3"|param4="value4"|param5="value5"';
$param = json_decode('{"' . str_replace(['=', '|'], ['":', ',"'], $param) . '}');
print_r($param);

这只是一个例子。不要在生产中使用它:)

答案 4 :(得分:0)

使用以下方法:

$param = 'param1="value1"|param2="value2"|param3="value3"|param4="value4"|param5="value5"';
$result = [];
foreach (explode('|', $param) as $item) {
    list($k,$v) = explode('=', $item);
    $result[$k] = trim($v, '"');
}
$result = (object) $result;

// as you wanted
print_r($result->param1);   // value1

答案 5 :(得分:0)

尝试使用parse_str,然后可以使用数组

创建一个对象
<?php
$param = 'param1="value1"|param2="value2"|param3="value3"|param4="value4"|param5="value5"';

$params = array();
parse_str(str_replace('|', '&', $param), $params);
$params = (object) $params;

echo $params->param1;

?>