php dizi düzenli ifadeler

2 Cevap php

Ben bir dize bulunan posta kodlarını maç php düzenli ifadeler kullanıyorum.

Sonuçlar gibi bir şey, her sonuç değişkenleri atamak için herhangi bir yol olup olmadığını merak ediyordum, bir dizi olarak iade ediliyor

$postcode1 = first match found
$postcode2 = second match found

İşte benim kod

$html = "some text here bt123ab and another postcode bt112cd";
preg_match_all("/([a-zA-Z]{2})([0-9]{2,3})([a-zA-Z]{2})/", $html, $matches, PREG_SET_ORDER);

foreach ($matches as $val) {
    echo $val[0]; }

Ben bu aptal bir soru ise beni affet, düzenli ifadeler ve php için çok yeni.

Şimdiden teşekkürler

2 Cevap

Update: bu örnek çalışması için, yerine PREG_SET_ORDER (Ben sizin kodda kullanılan düşünce PREG_PATTERN_ORDER kullanmak, ama açıkçası ben de okumak zorunda Hızlı ;)):

PREG_PATTERN_ORDER
Orders results so that $matches[0] is an array of full pattern matches, $matches[1] is an array of strings matched by the first parenthesized subpattern, and so on.

Eğer gerçekten istiyorsan, değişkenler onları atayabilirsiniz:

$postcode1 = $matches[0][0];
$postcode2 = $matches[0][1];

Ama sadece imo dizi elemanlarına erişim daha kolaydır.

Ya da daha süslü bir şey:

for ($i = 0; $i < count($matches[0]); $i++) {
        ${'postcode'.$i+1} = $matches[0][$i];
}

Ama ben sadece yapardı:

$postcodes = $matches[0];

ve sonra da normal dizi erişimi aracılığıyla posta kodlarını erişin.

Aşağıdaki PHP 5.3 + için çalışması gerekir:

$postcodearray = array_map(function($x) {return $x[0];}, $matches);
list($postcode1, $postcode2) = $postcodearray;

(Which of course could be combined into one line if you don't care about the array of postcodes itself.) To get the array of postcodes it uses an anonymous function. For the list() construct, see this related question: http://stackoverflow.com/questions/2182563/parallel-array-assignment-in-php

PHP yoksa 5.3 + (ya da anonim fonksiyon kafa karıştırıcı ise) bunu gibi "ilk" bir fonksiyon tanımlayabilirsiniz

function first($x) { return $x[0]; }

ve o zaman gibi posta kodları dizi olsun:

array_map("first", $matches)