sınırlayıcı dizi sonuç döndürdü

2 Cevap

Merhaba ben sonuçları bir kullanıcının seçtiği ne tür ürünün bağlı olarak döndü sınırlamak istiyorum, $ r [1] dizi ürün türüdür:

    foreach($list as $r) 
{ 
$row_color = ($row_count % 2) ? $color1 : $color2; 
$size2 = $r[2]; 
 echo "<tr>
        <td id=\"id\"><span id=\"non_sorting_header\">" .$r[0]. "</span></td>
        <td id=\"name\"><span id=\"non_sorting_header\">" .$r[1]. "</span></td>
        <td id=\"speed\"><span id=\"sorting_header\">" .kMGTB2($size2). "</span></td>
    	<td id=\"download\"><span id=\"sorting_header\">" .$r[3]. " Gb<br />per month</span></td>
        <td id=\"contract\"><span id=\"sorting_header\">1<br />month</span></td>
        <td id=\"info\"><span id=\"non_sorting_header\">".$r[5]."</span></td>
        <td id=\"buy\"><span id=\"non_sorting_header\">".$r[4]."<br />".$r[6]."</span></td>
      </tr>"; 
$row_count++; 
}

Kullanıcı 'muz' girerse Öyleyse fonksiyonu $ r [1] 'muz' kelimesi ile başlayan dizinin içindeki tüm örneklerini bulacaksınız - bu 'muz 1' vs 'muz 2' olabilir gibi bir başlangıç ​​anahtarıdır. ..

Bunu yapmak için bir kaygan yolunu değil ... Herhangi bir yardım mutluluk duyacağız!

2 Cevap

Eğer aşağıdaki gibi bir şey kullanabilirsiniz

function selectFromArray($prefix="", $productArray=array()) {

    return array_filter($productArray,
        create_function('$element', 
             'return (stripos($element[1],"'.$prefix.'") === 0); '));
}

Kullanılmış gibi:

$list = selectFromArray("Banana", $list);

sonra sayfanın geri kalanı ile devam edin.

O dedi, bu bir WHERE fıkra ile sql sorgu filtreleme bu tür yapmak için genellikle daha iyidir

Jonathan's answer gerçekten bunu yapmak için en iyi yol olup olmadığından emin değilim.

Her şeyden önce, create_function() is best avoided. Bunun için ayrı bir işlevi kullanırken bile olmadan, olsa da, hala iki listede döngü ediyoruz. Önce tüm listesinde döngü ayrıntılarını yazdırmak için, filtre listesi üzerinden döngü filtresinden, ardından da. Kolayca bu ikisini birleştirebilirsiniz:

foreach ($list as $r)
{
    if (stripos($r[1], $prefix) === 0) {
        continue;
    }

    // as before...
}

Bu durum daha fazla karmaşık alırsa tabii de ayrı bir işlev içine ayırabilir.