我用了个笨方法将以下数组$rules = array(
'student/|之间不管什么1|.html' => 'm=A1&a=show&id=#1',
'|之间不管什么1|/|之间不管什么|2.html' => 'm=Category&type=#1&page=#2'
);
//处理成这样一个结果数组:
$rules = array(
'm=A1&a=show&id=|之间不管什么1|' => 'student/#1.html',
'm=Category&type=|之间不管什么1|&page=|之间不管什么2|' => '#1/#2.html'
);
不知道大家的方法会是怎样的,想参照一下.以下我的笨方法$aRule = array(); //结果
//反转规则与URL
foreach($rules as $key => $value){
$reg = '#\|.*\|#U';
$matchCount = 0; //匹配到的数量
$aMatchResult = array(); //匹配到的内容
$matchCount = preg_match_all($reg, $key, $aMatchResult);
if(!$matchCount){
continue;
} $aMatchResult = $aMatchResult[0]; //取内容
//根据内容数量生成相应条数的#n
$aPartern = array();
for ($i = 0; $i < count($aMatchResult); $i++){
$aPartern[] = '#' . ($i + 1);
}
$tmpKey = str_replace($aPartern, $aMatchResult, $value); //将value里的一个个#1, #2.. #n换成对应的括号
$tmpValue = str_replace($aMatchResult, $aPartern, $key); //将key里的一个个 |竖号1|, |竖号2|.. |竖号n|换成对应的 #n $aRule[$tmpKey] = $tmpValue;
}
'student/|之间不管什么1|.html' => 'm=A1&a=show&id=#1',
'|之间不管什么1|/|之间不管什么|2.html' => 'm=Category&type=#1&page=#2'
);
//处理成这样一个结果数组:
$rules = array(
'm=A1&a=show&id=|之间不管什么1|' => 'student/#1.html',
'm=Category&type=|之间不管什么1|&page=|之间不管什么2|' => '#1/#2.html'
);
不知道大家的方法会是怎样的,想参照一下.以下我的笨方法$aRule = array(); //结果
//反转规则与URL
foreach($rules as $key => $value){
$reg = '#\|.*\|#U';
$matchCount = 0; //匹配到的数量
$aMatchResult = array(); //匹配到的内容
$matchCount = preg_match_all($reg, $key, $aMatchResult);
if(!$matchCount){
continue;
} $aMatchResult = $aMatchResult[0]; //取内容
//根据内容数量生成相应条数的#n
$aPartern = array();
for ($i = 0; $i < count($aMatchResult); $i++){
$aPartern[] = '#' . ($i + 1);
}
$tmpKey = str_replace($aPartern, $aMatchResult, $value); //将value里的一个个#1, #2.. #n换成对应的括号
$tmpValue = str_replace($aMatchResult, $aPartern, $key); //将key里的一个个 |竖号1|, |竖号2|.. |竖号n|换成对应的 #n $aRule[$tmpKey] = $tmpValue;
}
解决方案 »
- 请问有没有人用过traits类型?有个问题需要问
- 为什么php导入html中的代码,javascript不能对其产生作用
- 数组遍历取值的问题,大家帮忙!!!
- 我想设置一个页面变量,刷新之后不消失,如何做?
- document.referrer在ie中无效的问题?
- 关于搜索的问题。我如何在互联网里搜索我想要的资料,然后按要求写到我的数据库里呢?用PHP可以实现吗?如何现实?谢谢!
- IIS中asp.net与php如何共享信息?
- 我的php 显示gd变乱码???
- 关于行的输出
- 我想转向PHP,但不知mysql数据库有没有形成类似.mdb样的文件好下载备份?
- PHP的PDO的问题
- js如何获取页面里的$_SESSION的值,并为其加一?
'student/|之间不管什么1|.html' => 'm=A1&a=show&id=#1',
'|之间不管什么1|/|之间不管什么|2.html' => 'm=Category&type=#1&page=#2'
);
foreach($rules as $k=>$v) {
$t = preg_split('/(\|[^|]+\|)/', $k, -1, PREG_SPLIT_DELIM_CAPTURE);
preg_match_all('/#(\d+)/', $v, $r);
$k = preg_replace('/#(\d+)/e', '$t[$1]', $v);
for($i=0; $i<count($r[1]); $i++) {
$n = $p = $r[1][$i];
while($t[$p]{0} != '|') $p++;
$t[$p] = "#$n";
$res[$k] = join('', $t);
}
}
print_r($res);Array
(
[m=A1&a=show&id=|之间不管什么1|] => student/#1.html
[m=Category&type=|之间不管什么1|&page=/] => #1/#22.html
)你的规则似乎有点问题