lostyazilim
tr.link

Array İçinde Kullanmak İstiyorum

9 Mesajlar 1.518 Okunma
acebozum
tr.link

silenthilll silenthilll WM Aracı Kullanıcı
  • Üyelik 29.09.2011
  • Yaş/Cinsiyet 39 / E
  • Meslek öğrenci
  • Konum Manisa
  • Ad Soyad M** K**
  • Mesajlar 699
  • Beğeniler 61 / 126
  • Ticaret 1, (%100)
Aşağıda link üzerinde page sildirebiliyorum, fakat ikinci ve daha fazlasını sildirmek istediğimde array kullanmam gerekli bunu beceremedim. Mesela type ile birlikte pageyi sildirmek istiyorum.

$key = 'page';
$url = 'https://www.site.com/?type=product&page=5';

// Remove specific parameter from query string
$filteredURL = preg_replace('~(\?|&)'.$key.'=[^&]*~', '$1', $url);

echo $filteredURL; // Çıktısı 'https://www.site.com/?type=product
 

 

elektronikssl
webimgo

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 321
  • Ticaret 19, (%100)
İstediğiniz link yapısı nasıl olmalı? Bunu söylerseniz eğer ona göre uyarlayabiliriz.
Örneğin;
https://www.site.com/?type=product&page=(5,6,7)
Uygun mu?
 

 

soulmy soulmy WM Aracı Kullanıcı
  • Üyelik 12.06.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Öğretmen
  • Konum Samsun
  • Ad Soyad O** Y**
  • Mesajlar 1722
  • Beğeniler 398 / 400
  • Ticaret 20, (%100)
Tam olarak ne istiyorsunuz bilmiyorum ama parse_url belki işinizi görür. Bir bakın.
 

 

.

silenthilll silenthilll WM Aracı Kullanıcı
  • Üyelik 29.09.2011
  • Yaş/Cinsiyet 39 / E
  • Meslek öğrenci
  • Konum Manisa
  • Ad Soyad M** K**
  • Mesajlar 699
  • Beğeniler 61 / 126
  • Ticaret 1, (%100)
Yapmak istediğim şey şu sayfadaki şey. Lakin bu örnekte bir adet parametre silebiliyoruz ben birden fazla parametre silmek istiyorum. Sayfada bu : https://www.codexworld.com/how-to/remove-specific-parameter-from-url-query-string-php/

Örnekte bu: $key = 'page';
$url = 'https://www.codexworld.com/?type=product&page=5';

// Remove specific parameter from query string
$filteredURL = preg_replace('~(\?|&)'.$key.'=[^&]*~', '$1', $url);
 

 

wmaraci
wmaraci

silenthilll silenthilll WM Aracı Kullanıcı
  • Üyelik 29.09.2011
  • Yaş/Cinsiyet 39 / E
  • Meslek öğrenci
  • Konum Manisa
  • Ad Soyad M** K**
  • Mesajlar 699
  • Beğeniler 61 / 126
  • Ticaret 1, (%100)
Şu şekilde kullanıldığında tek parametreyi siliyor :
$key = 'page';
$url = 'https://www.site.com/?type=product&page=5';

// Remove specific parameter from query string
$filteredURL = preg_replace('~(\?|&)'.$key.'=[^&]*~', '$1', $url);

echo $filteredURL; // Çıktısı 'https://www.site.com/?type=product


fakat page ve type paremetrelerini birlikte silmek istediğimde çalışmıyor.
Yani şöyle birşey yapmak istiyorum fakat yemiyor :
$key = array('page','type');
$url = 'https://www.site.com/?type=product&page=5';

// Remove specific parameter from query string
$filteredURL = preg_replace('~(\?|&)'.$key.'=[^&]*~', '$1', $url);

echo $filteredURL; // Çıktısı 'https://www.site.com/?type=product
 

 

asw13tr asw13tr WM Aracı Kullanıcı
  • Üyelik 23.12.2018
  • Yaş/Cinsiyet 33 / E
  • Meslek Bilgisayar Programcısı
  • Konum Trabzon
  • Ad Soyad F** A**
  • Mesajlar 3
  • Beğeniler 0 / 1
  • Ticaret 0, (%0)
En acemi şekilde kodlayıp anlatmaya çalıştım. Umarım işine yarar


$url = 'https://www.site.com/?type=product&category=5&page=3&order_by=id&order=desc';

function clearParams($url, $strParams){
// $strParams ile gönderilen değerleri parçala
$items = explode(',', $strParams);

// $url i /? den öncesi ve sonrası olarak 2 parça yap
list($rootUrl, $query) = explode('/?', $url);

// type=product&category=5&page=3&order_by=id&order=desc her parçayı & den ayır ve diziye aktar
$urlParamsStr = explode('&', $query);

// Daha sonra birleştirmek adına kalan değerleri toplayacak dizi
$urlParams = array();

// type=product category=5 page=3 order_by=id order=desc tümünü tek tek dön
foreach ($urlParamsStr as $param) {

// type=product bu parçaları = den ayır ve type product şeklinde al
list($key, $val) = explode('=', $param);

// sıradaki değer örneğin "product" anahtarı $items içinde yok ise daha sonra birleştirilmek üzere $urlParams içine ekle
if(!in_array($key, $items)){

// Silinmeyecek olanları $urlParams dizisine key=val şeklinde ekle ör: type=product
$urlParams[] = $key.'='.$val;
}
}

// Silinmeyecek olan parametreleri örneğin "type=product", "page=3" gibi kalanları aralarına & ekleyerek birleştir
$newQuery = implode('&', $urlParams);

// "https://www.site.com" ile "key=val&key2=val2" değerleri aralarına /? ekleyerek birleştir ve sonucu çıkart
return $rootUrl.'/?'.$newQuery;
}

echo clearParams($url, 'category,order_by');




Temiz Kod

function clearParams($url, $strParams){

$items = explode(',', $strParams);
list($rootUrl, $query) = explode('/?', $url);
$urlParamsStr = explode('&', $query);
$urlParams = array();

foreach ($urlParamsStr as $param) {

list($key, $val) = explode('=', $param);
if(!in_array($key, $items)){
$urlParams[] = $key.'='.$val;
}

}

$newQuery = implode('&', $urlParams);

return $rootUrl.'/?'.$newQuery;
}



Kullanımı

$newUrl = clearParams("https://www.site.com/?type=product&category=5&page=3&order_by=id&order=desc", 'category,order_by');
silenthilll

kişi bu mesajı beğendi.

silenthilll silenthilll WM Aracı Kullanıcı
  • Üyelik 29.09.2011
  • Yaş/Cinsiyet 39 / E
  • Meslek öğrenci
  • Konum Manisa
  • Ad Soyad M** K**
  • Mesajlar 699
  • Beğeniler 61 / 126
  • Ticaret 1, (%100)
asw13tr eyvallah pek güzel oldu teşekkür ederim.
 

 

silenthilll silenthilll WM Aracı Kullanıcı
  • Üyelik 29.09.2011
  • Yaş/Cinsiyet 39 / E
  • Meslek öğrenci
  • Konum Manisa
  • Ad Soyad M** K**
  • Mesajlar 699
  • Beğeniler 61 / 126
  • Ticaret 1, (%100)
&araba=Opel"> Lik Verildi

asw13tr
Yukarıdaki gibi link verdiğimizde tarayıcıda şu şekilde gözüküyor :
https://www.site.com/?=&araba=Opel
yani soru işaretinden sonra fazladan = işareti koyuyor. Eğer $urlParams[] = $key.'='.$val; içerisindeki = işaretini kaldırsan bu seferde paremetre aralarına eşittir işareti koymuyor.

Bunu nasıl çözebiliriz aşağıdaki gibi birşey mi yapılmalı

if(!in_array($key, $items)){
$urlParams[] = $key.'='.$val;
} elseif (parametre yok ise) {
$urlParams[] = $key.''.$val;
}
 

 

asw13tr asw13tr WM Aracı Kullanıcı
  • Üyelik 23.12.2018
  • Yaş/Cinsiyet 33 / E
  • Meslek Bilgisayar Programcısı
  • Konum Trabzon
  • Ad Soyad F** A**
  • Mesajlar 3
  • Beğeniler 0 / 1
  • Ticaret 0, (%0)
">



Senin sonradan eklediğin parametreyide fonksiyonun içindeki linke ekle.
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al