喜悦国际村 » PHP高级编程 » 好久没来了,请教高手一个变量问题

页: [1]
gxlee2008-3-15 10:48 PM
好久没来了,请教高手一个变量问题

有一个较长的字串类似这样:$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;

gxlee2008-3-15 11:35 PM
有个eval()函数,不知有没用。

songlv2008-3-16 02:21 AM
你那个替换不行 ,万一值里有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]

gxlee2008-3-16 03:28 AM
谢谢!我测试有以下提示:
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 ( ) )

gxlee2008-3-16 03:36 AM
d前加\,就行了。
preg_match_all('|(s\d+)="(.*)"|isU',$str,$d); 

songlv2008-3-16 04:54 AM
回复 #5 gxlee 的帖子

晕了,我明明加了 竟然被过滤掉了

songlv2008-3-16 07:08 AM
没过滤,点查看源代码里能看到, 可能 是村里代码着色功能的BUG

飞光2008-3-23 02:00 AM
放到一个*.ini文件里 然后用parse_ini_file()函数来读这个ini文件

cf6022008-3-25 09:06 AM
我的一个方法,不知道可不可以

<?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);
?>

lonce20962008-3-26 01:31 PM
思路其实很简单  以 " 符号开头 以 " 结尾  取中间内容   一个叠代    不要去做循环 这样效率是最高的 也是最快的

font2008-3-29 03:52 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 />";
?>

songlv2008-4-1 07:18 AM
直接用 parse_str()即可


查看完整版本: 好久没来了,请教高手一个变量问题


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.006215 second(s), 2 queries