页:
[1]
|
好久没来了,请教高手一个变量问题
有一个较长的字串类似这样:$str=" s1=\"s3,sz99,sz11\";s2=\"99106,s0001,s_001\";……sn=\"g67,g90,nkk\"; ";
如何要得到里面变量的值(全以“s”开头)?
我的做法如下,但感觉很笨,请高手指点!
$str=str_replace("s","$s",$str);
$fp = fopen("c:/s.txt","w+");
fwrite($fp , "<?\r\n".$str ." ?>");
fclose($fp);
require_once("c:/s.txt");
echo $s2; |
|
你那个替换不行 ,万一值里有s的话不也被替换了?
我给你写个吧
[php]
<?php
$str='s1="s3,sz99,sz11";s2="99106,s0001,s_001";s3="g67,g90,nkk";s4="g6sd7,gdd90,nddkk";';
preg_match_all('|(s\d+)="(.*)"|isU',$str,$d);
$r=array_combine($d[1],$d[2]); //PHP5 only!
extract($r);
//看下结果吧
print_r(get_defined_vars()); //输出全部变量
?>
[/php] |
|
谢谢!我测试有以下提示:
Warning: array_combine() [function.array-combine]: Both parameters should have at least 1 element in
可能是正则没匹配好,
print_r($d); 的结果是:
Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) ) |
|
d前加\,就行了。
preg_match_all('|(s\d+)="(.*)"|isU',$str,$d); |
|
回复 #5 gxlee 的帖子
晕了,我明明加了 竟然被过滤掉了 |
|
| 没过滤,点查看源代码里能看到, 可能 是村里代码着色功能的BUG |
|
| 放到一个*.ini文件里 然后用parse_ini_file()函数来读这个ini文件 |
|
我的一个方法,不知道可不可以
<?php
$str="s1=\"s3,sz99,sz11\";s2=\"99106,s0001,s_001\";s3=\"g67,g90,nkk\";s4=\"g6sd7,gdd90,nddkk\";";
$array1 = explode(';',$str);
array_pop($array1);
print_r($array1);
$array2 = array();
foreach ($array1 as $value) {
$str = explode("=",$value);
$array2[$str[0]] = $str[1];
}
print_r($array2);
?> |
| lonce2096 | 2008-3-26 01:31 PM |
|
| 思路其实很简单 以 " 符号开头 以 " 结尾 取中间内容 一个叠代 不要去做循环 这样效率是最高的 也是最快的 |
|
<?php
$str=" s1=\"s3,sz99,sz11\";s2=\"99106,s0001,s_001\";……sn=\"g67,g90,nkk\"; ";
$c=preg_match_all("/(s\w+)\=\s*\"(.+?)\"\s*;/i",$str,$m);
if ($c){
foreach($m{'1'} as $k => $v){
$$v = $m{'2'}{$k};
}
}
echo $s1."<br />";
echo $s2."<br />";
echo $sn."<br />";
?> |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.006215 second(s), 2 queries |