我有一个刺痛,在该字符串中,我的数组值被存储。如何从字符串中获取数组值?在PHP中是否有任何预定义的功能或将使用REGEX实现?
$rule ="array(
array('parameter'=> 'signature name', 'values'=>'RNSOC023', 'condition'=>'EQUALS', 'rule type'=>'AND'),
array('parameter'=> 'DestinationZone', 'values'=>'l3-internet', 'condition'=>'EQUALS', 'rule type'=>'AND'),
array('parameter'=> 'Application', 'values'=>'ftp,sftp', 'condition'=>'EQUALS', 'rule type'=>'AND')
)";
如果我做print_r($ rule);它只给出与上面相同的字符串值。但我希望输出像
Array ( [0] => Array ( [parameter] => signature name [values] => RNSOC023 [condition] => EQUALS [rule type] => AND ) [1] => Array ( [parameter] => DestinationZone [values] => l3-internet [condition] => EQUALS [rule type] => AND ) [2] => Array ( [parameter] => Application [values] => ftp,sftp [condition] => EQUALS [rule type] => AND ) )
答案 0 :(得分:3)
终于得到了解决方案,试试这个:
$rule ="array(
array('parameter'=> 'signature name', 'values'=>'RNSOC023', 'condition'=>'EQUALS', 'rule type'=>'AND'),
array('parameter'=> 'DestinationZone', 'values'=>'l3-internet', 'condition'=>'EQUALS', 'rule type'=>'AND'),
array('parameter'=> 'Application', 'values'=>'ftp,sftp', 'condition'=>'EQUALS', 'rule type'=>'AND')
)";
$returnValue = '';
eval("\$returnValue = $rule;");
print_r($returnValue);
答案 1 :(得分:3)
eval()是邪恶的!它使您的代码可以解决各种安全问题,应该不惜一切代价避免使用。试试这个:
$rule ="array(
array('parameter'=> 'signature name', 'values'=>'RNSOC023', 'condition'=>'EQUALS', 'rule type'=>'AND'),
array('parameter'=> 'DestinationZone', 'values'=>'l3-internet', 'condition'=>'EQUALS', 'rule type'=>'AND'),
array('parameter'=> 'Application', 'values'=>'ftp,sftp', 'condition'=>'EQUALS', 'rule type'=>'AND')
)";
preg_match_all("/(?:array\()('.*?'\s*=>\s*'.*?'\s*)+(?:\))/", $rule, $matches);
$rulearray = array();
$i = 0;
foreach ($matches[1] as $value) {
preg_match_all("/('.*?'\s*=>\s*'.*?')/", $value, $m);
foreach ($m[1] as $e) {
list ($k, $v) = preg_split('/\s*=>\s*/', $e);
$rulearray[$i][$k] = $v;
}
$i++;
}
print_r($rulearray);
输出:
Array ( [0] => Array ( ['parameter'] => 'signature name'
['values'] => 'RNSOC023'
['condition'] => 'EQUALS'
['rule type'] => 'AND' )
[1] => Array ( ['parameter'] => 'DestinationZone'
['values'] => 'l3-internet'
['condition'] => 'EQUALS'
['rule type'] => 'AND' )
[2] => Array ( ['parameter'] => 'Application'
['values'] => 'ftp,sftp'
['condition'] => 'EQUALS'
['rule type'] => 'AND' )
)
答案 2 :(得分:0)
代码将在调用eval()的代码范围内执行。因此,在eval()调用中定义或更改的任何变量在终止后仍然可见。详情HERE
eval("\$rule = $rule;");
print_r($rule);
答案 3 :(得分:0)
用于将数据数组保存在数据库中的方法是错误的,您应该在数据库中使用json字符串格式,并且在获取数据时,您可以在php中将json_decode函数转换为数组。尝试将该数组转换为json字符串并存储在db中。这是最好的做法。这就是为什么你会遇到这些类型的问题。
答案 4 :(得分:0)
所以基本上你需要json_encode()来制作数组。 我现在测试的是以下内容:
$rule = array(array('parameter1'=> 'signature name', 'values'=>'RNSOC023', 'condition'=>'EQUALS', 'rule type'=>'AND'), 1 => array('parameter2'=> 'DestinationZone', 'values'=>'l3-internet', 'condition'=>'EQUALS', 'rule type'=>'AND'), 2 => array('parameter'=> 'Application', 'values'=>'ftp,sftp', 'condition'=>'EQUALS', 'rule type'=>'AND'));
$jr = json_encode($rule);
$jd = json_decode($jr, true);
print $jd[0]['values'];
以上工作,并在我的环境中进行了测试。
有关json_encode();
和json_decode();
如果您运行print_r($jd);
,您将获得以下输出:
Array ( [0] => Array ( [parameter1] => signature name [values] => RNSOC023 [condition] => EQUALS [rule type] => AND ) [1] => Array ( [parameter2] => DestinationZone [values] => l3-internet [condition] => EQUALS [rule type] => AND ) [2] => Array ( [parameter] => Application [values] => ftp,sftp [condition] => EQUALS [rule type] => AND ) )