Bölüme bir dize kadar bölme

4 Cevap php

Ben belirli kriterler yerine getirildiği takdirde, yalnızca görüntülenecek olan bazıları, bir tablodaki soruların bir listesi var. Bir rekor 4002 soru sayısı ve Y cevabı 4002 = Y kadar basit kriterleri olabilir. 4002'de ise = Y o soru görüntülenecek.

Tek kriterlerine kayıtları için hiçbir sorun yok.

Ama sonra aşağıdaki gibi kriterlere sahip kayıtlar vardır:

402=Y OR 7003=Y OR 905=Y OR 7007=Y OR 7008=Y OR 7010=Y OR 7011=Y OR 7013=Y

Bu durumda ben soru görüntülenen veya değil gibi olup olmadığını görmek için her seçeneği değerlendirmek gerekir.

Diğer sorular benzer dizeleri olacak; bazıları kısa, bazıları daha uzun.

Nasıl en iyi ben bu yüzden bir anda her bölümünü değerlendirmek ve hala bunları doğru karşılaştırmak mümkün olabilir dize bölmek istiyorsunuz?

Ben bir dereceye kadar verileri biçimlendirmek, ama ben mümkünse tercih ederim.

Bu bir regex() görev (Ben henüz o çok aşina değilim) mi? I list(), split() ve explode() az başarı ile denedim.

Herhangi bir işaretçiler mutluluk duyacağız.

4 Cevap

Lütfen giriş dizesi gerçekten sadece "OR" ile ayrılmış basit kriterlerin bir demet ise, basit bir) gerçekten hile yapacak (patlayabilir:

$criteria = "402=Y OR 7003=Y OR 905=Y OR 7007=Y OR 7008=Y OR 7010=Y OR 7011=Y OR 7013=Y";
$split_criteria = explode("OR", $criteria);

foreach ($split_criteria as $single)
{
    echo trim($single) . "\n";
}

(Eğer izin VE yanı OR gibi, derseniz) daha karmaşık ise ancak o zaman buna akıllı ayrıştırıcı gerekir.

deneyebilirsiniz

if (strpos($record,"OR" )!==FALSE){
    $s = explode("OR",$record);
    foreach ($s as $k){
      #do something with $k
    }
}

Ben ilk olarak "ayırıcı" değiştirmek için dize karşı bir regex koşmak "ve" istiyorum -. Özellikle "VEYA" 's (o kadar kolay Sonra parse_str() kullanmak ayrı her dönem Döşeme / ayarlamak için deneyin ve daha regex ifade etmek çevresinde ekstra boşluk olabilir bir durumda Her dizin soru sayısı ve değeri "Y" veya "N" olan bir dizi var.

Bu belirttiğiniz biçimini varsayar ve ben (hayır) (evet) olası değerler ya Y olacak varsayarak veya N ediyorum


$string = '402=Y OR 7003=Y OR 905=Y OR 7007=Y OR 7008=Y OR 7010=Y OR 7011=Y OR 7013=Y';
$regex = "/\b([\d]+)=([YN])\b/";

if (preg_match_all($regex, $string, $matches)) {
       print_r($matches);
}

Should give you:
Array
(
    [0] => Array
        (
            [0] => 402=Y
            [1] => 7003=Y
            [2] => 905=Y
            [3] => 7007=Y
            [4] => 7008=Y
            [5] => 7010=Y
            [6] => 7011=Y
            [7] => 7013=Y
        )

    [1] => Array
        (
            [0] => 402
            [1] => 7003
            [2] => 905
            [3] => 7007
            [4] => 7008
            [5] => 7010
            [6] => 7011
            [7] => 7013
        )

    [2] => Array
        (
            [0] => Y
            [1] => Y
            [2] => Y
            [3] => Y
            [4] => Y
            [5] => Y
            [6] => Y
            [7] => Y
        )

)