本帖最后由 tangguowei 于 2009-11-30 03:24:40 编辑

解决方案 »

  1.   

    $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")
    写了这么多,不知道大家看明白没有,再不明白,我真的不知道如何描述了
      

  2.   

    楼主,要达到你说的那种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楼中提及的思路,确实挺复杂。
      

  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;
      

  4.   

    恩……我的想法是这样
    按照楼主的思路如果是这么个url的数组的话,是不是相当于$arr这里俩个子数组进行了一个笛卡尔集呢??
      

  5.   

    我不清楚什么是笛卡尔集啊,我这样处理了一下
    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 ) 
      

  6.   


    $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之后,对它这个数组进行单独的操作
      

  7.   

    运行了下,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就是一个数组了……(如果这样运行这后,之后的那个替换,估计要换个)