PHP fonksiyonu patlayabilir

5 Cevap php

Ben etiketleri kullanıcı türünü bildirmek istiyorum:

Windows Linux "mac os x"

ve sonra boşluk bunları bölmek değil, aynı zamanda bir kelime olarak "mac os x" tanıma.

Bu diğer fonksiyonları ile patlayabilir işlevini birleştirmek mümkün mü?

Bir yolu olmalı.

5 Cevap

Sürece tırnak içinde tırnak (örn. "foo\"bar" izin verilmez) olamaz gibi, normal bir ifade ile bunu yapabilirsiniz. Aksi takdirde tam bir ayrıştırıcı gerekir.

Bu yapmanız gerekir:

function split_words($input) {
  $matches = array();
  if (preg_match_all('/("([^"]+)")|(\w+)/', $input, $reg)) {
    for ($ii=0,$cc=count($reg[0]); $ii < $cc; ++$ii) {
      $matches[] = $reg[2][$ii] ? $reg[2][$ii] : $reg[3][$ii];
    }
  }
  return $matches;
}

Kullanımı:

$input = 'windows linux "mac os x"';
var_dump(split_words($input));

Ben ayrılmış etiketleri virgül girmek ve virgül sınırlayıcısı ile patlayabilir kullanıcı rica ediyorum:

$string = "windows, linux, mac os x";
$pieces = explode(',', $string);

Bu zaten onlar yol en etiket sistemi eseridir.

patlamak ne istediğinizi ile baş edemez, çünkü aksi takdirde bir ayrıştırıcı oluşturmak gerekir. Regex bence bir overkill.

Kullanıcı Elzo Valugi olarak önerilen virgül ile etiket değerlerini ayırmak veya kullanıcıların (Google Wave ya da Wordpress adlı etiketleme UI benzer) bir seferde bir etiket girin böylece UI geliştirmek var ya. Ben daha sonra öneririz.

Eğer gerçekten (ben önermiyorum) önerdiğiniz giriş biçimi ile sopa istiyorsanız, (bölünmüş olması gerekiyordu olmadığını olanlar) multi-word etiketlerin listesini korumak olabilir. Bu listeye karşı kullanıcı tarafından sağlanan kombine etiketi dize karşılaştırmak ve bu terimleri bölmek yok emin olun. Bu yönteme yapışmasını set ediyorsanız, daha fazla detaya gidebiliriz, ancak giriş biçimi kendisi kusurlu olduğu gibi ben bunun iyi bir fikir olduğunu sanmıyorum.

Bir regex yapabilirdi. Ben bunları yazarken de iyi değilim, ama burada başkası tırnak olmayan alanlarda onları kırma 'kelimeleri' maç gerekir.

Kullanıcı dize girerken "mac os x" otomatik beyaz boşluk algılayabilir ve "mac-os-x" daha sonra yine bu şekilde patlayabilir dize değiştirin:

$os = "metasys solaris mac-os-x";
$strings = explode(' ', $os);

Sen replace fonksiyonunu kullanarak bunu yapabilirsiniz.