分类信息自定义搜索url怎么处理? 本帖最后由 tangguowei 于 2009-11-30 03:24:40 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $arr= Array( 'type' => Array ( '1' => '出售', '2' => '求购', ), 'price' => Array ( '1' => '500元以下', '2' => '500-1000元', ),);foreach ($arr as $key1=>$val){ foreach($val as $key2=>$val2){ $url=geturl($urlArr); $search[$key1][]=array('value'=>$key2,'name'=>$val2,'url'=>$url); }}其中$urlArr如何处理当$key1=type,$key2=1时,$urlArr=array('type'=>"1",'price'=>"$price")$key1=type,$key2=2时,$urlArr=array('type'=>"2",'price'=>"$price")$key1=price,$key2=1时,$urlArr=array('type'=>"$type",'price'=>"1")$key1=price,$key2=2时,$urlArr=array('type'=>"$type",'price'=>"2")以后如果再加一个区域,比如area则当$key1=type,$key2=1时,$urlArr=array('type'=>"1",'price'=>"$price",'area'=>"$area")...另外还有一些固定的字段如:分类sort,时间postTime等,最后将上面处理的$urlArr数组与这些固定字段拼在一起,如当$key1=type,$key2=1时,$urlArr=array('type'=>"1",'price'=>"$price",'sort'=>"$sort",'postTime'=>"$postTime")写了这么多,不知道大家看明白没有,再不明白,我真的不知道如何描述了 楼主,要达到你说的那种url的变换的,不需要都在php中处理过url之后在输出,可以再js中构造url 比如 你的输出的可选项是从$type_arr=Array( '1'=>'出售', '2'=>'求购');$price_arr=Array( '1'=>'500元以下', '2'=>'500-1000元');从输出,可以点击的地方加个js的方法,触发的时候,根据选择的内容构造一个url并转向,也能达到楼主说的整个效果而且按照楼主在3楼中所提到的意思,如果是预先设计好url,那这个应该是一个函数当中的方法,最后得到一个含有构造url的数组,应该是通过传入的值来选择, 如果不是一个函数,那就是说每页都要进行这个url的构造操作。不过说到楼主在3楼中提及的思路,确实挺复杂。 哦,我在程序中使用了smarty,我现在的想法是把url处理好保存在search数组中,在模板中这样调用,比如调用价格则:(其中,price就是后台增加的价格的字段名){foreach from=$search.price item=price} <a href="{$price.url}">{$price.name}</a>{/foreach}已经能正常输出了,只是url没有处理好to:4楼意思是不是点链接的时候,触发一个js过程,组合成url然后:window.location.href=url; 恩……我的想法是这样按照楼主的思路如果是这么个url的数组的话,是不是相当于$arr这里俩个子数组进行了一个笛卡尔集呢?? 我不清楚什么是笛卡尔集啊,我这样处理了一下foreach(条件)....$Temp_arr.="'$field'=>$$field,";}$Temp_arr = substr($Temp_arr,0,strlen($Temp_arr)-1);//去掉最后一个,号此时$Temp_arr为'type'=>$type,'price'=>$priceif (is_array($arr)){ foreach ($arr as $key1=>$val){ foreach($val as $key2=>$val2){ $url_arr1=array(str_replace("$$key1",$key2,$Temp_arr)); $url_arr2=array('catid'=>$catid,'areaid'=>$areaid,'page'=>$page); $url = array_merge($url_arr1, $url_arr2); $search[$key1][]=array('value'=>$key2,'name'=>$val2,'url'=>$url); print_r($url);exit; } } }为什么输出的url为Array ( [0] => 'type'=>1,'price'=>$price [catid] => 13 [areaid] => [page] => 1 ) 而不是:Array ([type]=>1[price]=>$price[catid] => 13 [areaid] => [page] => 1 ) $search[$key1][]=array('value'=>$key2,'name'=>$val2,'url'=>$url); 设置的url指向的是一个数组了如果输出url 肯定就是一个数组这样整个是一个一维的数组:$url = array_merge($url_arr1, $url_arr2);$arr=array('value'=>$key2,'name'=>$val2);$search[$key1][]=array_merge($arr,$url);或是:得到url之后,对它这个数组进行单独的操作 运行了下,url出现二维数组的情况:$url_arr1=array(str_replace("$$key1",$key2,$Temp_arr)); 这句, 因为你传入的str_replace("$$key1",$key2,$Temp_arr)是一个字符串,虽然你里面是以数组'type'=>$type,'price'=>$price 但是统一的就是一个字符串然后这里生产的$url_arr1就是[0]=>'type'=>$type,'price'=>$price这样了:解决方法(可试):在foreach循环外申明$Temp_arr是一个数组$Temp_arr=Array();在foreach中$Temp_arr['$field']='$$field'这样来生产 这样生产的$Temp_arr就是一个数组了……(如果这样运行这后,之后的那个替换,估计要换个) php 中如何进行mysql参数化查询? (急求)thinkPHP模板页面往控件里赋值 单点登录问题 PHP管理系统 如何上传超过2M的文件? 关于php中tidy模块编码问题,有兴趣的来,没分了,不好意思. IIS上利用PHP支持PATH_INFO,安装后没有反应嘛! PHP中如何实现注册用户自动回复邮件通知? 高分求解????????????????????????????????????????????????? 这些网站的php简繁体转换为什么会这么快啊?请大家帮忙看看啊,给100分 50分问一个基础问题,欢迎大家来抢分! 文件下载类网站,下载地址字段应该怎么设计?
'type' => Array (
'1' => '出售',
'2' => '求购',
),
'price' => Array (
'1' => '500元以下',
'2' => '500-1000元',
),
);foreach ($arr as $key1=>$val){
foreach($val as $key2=>$val2){
$url=geturl($urlArr);
$search[$key1][]=array('value'=>$key2,'name'=>$val2,'url'=>$url);
}
}
其中$urlArr如何处理当
$key1=type,$key2=1时,$urlArr=array('type'=>"1",'price'=>"$price")
$key1=type,$key2=2时,$urlArr=array('type'=>"2",'price'=>"$price")
$key1=price,$key2=1时,$urlArr=array('type'=>"$type",'price'=>"1")
$key1=price,$key2=2时,$urlArr=array('type'=>"$type",'price'=>"2")
以后如果再加一个区域,比如area则当
$key1=type,$key2=1时,$urlArr=array('type'=>"1",'price'=>"$price",'area'=>"$area")
...
另外还有一些固定的字段如:分类sort,时间postTime等,最后将上面处理的$urlArr数组与这些固定字段拼在一起,如当$key1=type,$key2=1时,
$urlArr=array('type'=>"1",'price'=>"$price",'sort'=>"$sort",'postTime'=>"$postTime")
写了这么多,不知道大家看明白没有,再不明白,我真的不知道如何描述了
比如 你的输出的可选项是从
$type_arr=Array(
'1'=>'出售',
'2'=>'求购');
$price_arr=Array(
'1'=>'500元以下',
'2'=>'500-1000元');
从输出,可以点击的地方加个js的方法,触发的时候,根据选择的内容构造一个url并转向,也能达到楼主说的整个效果
而且按照楼主在3楼中所提到的意思,如果是预先设计好url,那这个应该是一个函数当中的方法,最后得到一个含有构造url的数组,应该是通过传入的值来选择, 如果不是一个函数,那就是说每页都要进行这个url的构造操作。
不过说到楼主在3楼中提及的思路,确实挺复杂。
在模板中这样调用,比如调用价格则:(其中,price就是后台增加的价格的字段名)
{foreach from=$search.price item=price}
<a href="{$price.url}">{$price.name}</a>
{/foreach}
已经能正常输出了,只是url没有处理好to:4楼
意思是不是点链接的时候,触发一个js过程,组合成url然后:window.location.href=url;
按照楼主的思路如果是这么个url的数组的话,是不是相当于$arr这里俩个子数组进行了一个笛卡尔集呢??
foreach(条件)
....
$Temp_arr.="'$field'=>$$field,";
}
$Temp_arr = substr($Temp_arr,0,strlen($Temp_arr)-1);//去掉最后一个,号此时$Temp_arr为
'type'=>$type,'price'=>$priceif (is_array($arr)){
foreach ($arr as $key1=>$val){
foreach($val as $key2=>$val2){
$url_arr1=array(str_replace("$$key1",$key2,$Temp_arr));
$url_arr2=array('catid'=>$catid,'areaid'=>$areaid,'page'=>$page);
$url = array_merge($url_arr1, $url_arr2);
$search[$key1][]=array('value'=>$key2,'name'=>$val2,'url'=>$url);
print_r($url);exit;
}
}
}
为什么输出的url为Array ( [0] => 'type'=>1,'price'=>$price [catid] => 13 [areaid] => [page] => 1 )
而不是:Array ([type]=>1[price]=>$price[catid] => 13 [areaid] => [page] => 1 )
$search[$key1][]=array('value'=>$key2,'name'=>$val2,'url'=>$url); 设置的url指向的是一个数组了
如果输出url 肯定就是一个数组
这样整个是一个一维的数组:
$url = array_merge($url_arr1, $url_arr2);
$arr=array('value'=>$key2,'name'=>$val2);
$search[$key1][]=array_merge($arr,$url);
或是:
得到url之后,对它这个数组进行单独的操作
$url_arr1=array(str_replace("$$key1",$key2,$Temp_arr)); 这句,
因为你传入的str_replace("$$key1",$key2,$Temp_arr)是一个字符串,虽然你里面是以数组'type'=>$type,'price'=>$price 但是统一的就是一个字符串然后这里生产的$url_arr1就是[0]=>'type'=>$type,'price'=>$price
这样了:
解决方法(可试):
在foreach循环外申明$Temp_arr是一个数组$Temp_arr=Array();在foreach中$Temp_arr['$field']='$$field'这样来生产 这样生产的$Temp_arr就是一个数组了……(如果这样运行这后,之后的那个替换,估计要换个)