dizi dönemine öğeyi kaldırarak php

2 Cevap php

Ben widget ürünleri bir dizi var.

Bazı widget'lar adlarında ayrılmış dönem sembolü var.

Php dönemi karşıladığında sorun oluşur, Widget adı kalanı göz ardı edilir. Dönem sembolü engel olmayacak şekilde nasıl bir dize olarak widget okuyabilir?

unset($products[$widget]);

Onu rezerve karakteri değil ki ben bir tutucu mektupla dönemi yerini alabilecek, ama ben tercih ederim.

Teşekkürler

2 Cevap

Ben yanlış bazı varsayımlar yapılır. Ben # sembolleri etkilenen kodu yaptıkları yolunu bilmiyordu çünkü Widget ismim de ben söz yoksun kiloluk sembolleri içermektedir.

Ama unset komutunu kullanırken Pound sembolü değil, tüm sonra soruna neden, ama dışarı çıkıyor gibi.

I [''] $ _GET kullanarak URL üzerinden Widget'in adını geçti. Görünüşe göre alıcı get # sembolü gibi ve sterlin # sembolleri sonra her şeyi kaldırır değil.

Here's a quick explanination. Soo… let’s say I was passing the widget name of “crank#x.55”. If I echo’ed the $_GET variable you’d see "crank" and the remaining "#x.55" is stripped off.

Ben url baktığımda bunun doğru $ _GET var gönderildiğini inanmak için bana yol olan "krank # x.55" (tam Widget adı) gösterdi. Ben orijinal bir soru yarattı ki bu yüzden ben unset peformed zaman periyodu (concatination) sembolü kaçık bir şey yaptığımı sanıyordum. <(I gelecek sorular için daha fazla gerçekleri eklemeniz gerekir biliyorum) - öğrenme süreci.

Ben veri preg_replace kullanarak geri pound @ sembolü dönüştürmek gönderdi edildikten sonra sadece o @ sembollerle kiloluk sembolleri değiştirerek ve sorun çözüldü. Pixeline cevabı için benzer sadece benim amaç için biraz uyarlanmış.

Teşekkürler

değer olarak anahtar olarak kendi adını normalleştirilmiş bir değer ve gerçek Widget adı kullanın.

Örnek:

function slug($str)
{
    $str = strtolower(trim($str));
    $str = preg_replace('/[^a-z0-9-]/', '-', $str);
    $str = preg_replace('/-.+/', "-", $str);
    return $str;
}

$products[slug($widget)] = $widget;