2016-04-04 11 views
1

Parametrelerin bir dizi olduğu bir URL'im var. Bu şuna benzer: Bir parametreyi unset wan't zamanphp unset url parameters dizisi

&fq[]=subjects:Human+beings&fq[]=subjects:Ethnology 

Genellikle bu işlev yoluyla gönderebilir:

<a href="<?php echo remove_modify_url(array('fq' => urlencode($facetValue)));?>"><?php echo $facetValue; ?></a> 

function remove_modify_url($par, $url = FALSE){ 
if($url == FALSE){ 
    $scheme = $_SERVER['SERVER_PORT'] == 80 ? 'http' : 'https'; 
    $url = $scheme.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
} 
$url_array = parse_url($url); 
if(!empty($url_array['query'])){ 
    parse_str($url_array['query'], $query_array); 
    foreach ($par as $key => $value) { 
      unset($query_array[$key]); 
    } 
} 
return $url_array['path'].'?'.http_build_query($query_array); 
} 

Ancak bu FQ nun bir anahtara sahip olan her şeyi getopts. Diğer tüm parametreleri silmeden belirli bir dizi parametresini kaldırmak istiyorum. Bu durumda, bir kullanıcı konuları kaldırmak için bir düğmeye tıklar: İnsan + varlıkları ve url, fq [] = konularına değişir: Etnoloji.

cevap

0

Umarız doğru şekilde takip ediyorum ama $_GET dizisini kullanacağım.

$params = $_GET; 
$delete = 'subjects:Ethnology'; 

unset($params['fq'][array_search($delete, $params['fq'])]);  
echo http_build_query($params); 

Ya preg_grep() olanları uymayan almak için: Her iki şekilde array_search() bir unset() için bulabilirsiniz. Belki sadece bir, ancak daha esnek arama için overkill:

$params['fq'] = preg_grep("/$delete/", $params['fq'], PREG_GREP_INVERT); 
echo http_build_query($params); 
+0

Mükemmel. Unset çizgisini şu şekilde ayarladım: unset ($ params ['fq'] [array_search ($ delete, $ params ["fq")]); ama aksi takdirde beklendiği gibi çalıştı. Teşekkürler! –