我有自定义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;
答案 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"
答案 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;
?>