Değerler filtre Dizisi

3 Cevap php

Ben PHP kullanıyorum ve ben filtre gerek kullanıcı görüntülerin bir dizi var. Ben 2 farklı filtreler yapmanız gerekir:

  1. Orijinal dizideki bakmak ve her değer benim "kötü sözler" dizisindeki bir değer içerip içermediğini
  2. Bakın ve orijinal dizideki değer "kötü uzantıları" değerlerinden biri biterse bakın

Görüntüler Dizisi:

Array  
(  
    [0] => smiles.gif  
    [1] => kittens.jpg  
    [2] => biscuits.png  
    [3] => butthead.jpg  
)  

$bad_words = array('beavis','butthead','winehouse');  
$bad_extensions = array('.gif','.tiff');

Ben dönmek istiyorum:

Array  
(  
    [0] => kittens.jpg  
    [1] => biscuits.png  
)

3 Cevap

$array = array("smiles.gif", "kittens.jpg", "biscuits.png", "butthead.jpg");

$new_arr = array_filter($array, "filter");

function filter($element) {
    $bad_words = array('beavis','butthead','winehouse');  
    $bad_extensions = array('gif','tiff');

    list($name, $extension) = explode(".", $element);
    if(in_array($name, $bad_words))
    	return;

    if(in_array($extension, $bad_extensions))
    	return;

    return $element;
}


echo "<pre>";
print_r($new_arr);
echo "</pre>";

Çıkışlar

Array
(
    [1] => kittens.jpg
    [2] => biscuits.png
)

I kaldırıldı. Lütfen uzantıları tho

edit: eklendi kötülerin pire düzeltme

Öncelikle, ben senin uzantısı listesinde dönemleri kaldırmak istiyorum. Sadece kod daha zor hale getirecektir. Bunu yaptıysanız, aşağıdaki (denenmemiş) kod çalışır, ya da en azından bir başlangıç ​​olmalıdır

$cleanArray = [];

foreach($array as $value) {

    $extension = path_info($value, PATHINFO_EXTENSION);

    if (in_array($extension, $bad_extensions)) {
        continue;
    }

    foreach($bad_words as $word) {
        if (strstr($word, $value)) {
            continue 2;
        }
    }
    $cleanArray[] = $value;


}

$ CleanArray istediğiniz değerlere sahip olmalıdır.

Burada PHP çevrimiçi dokümanlar bazı kullanışlı referanslar vardır

Siz PHP array_filter fonksiyonunu kullanabilirsiniz, sadece istediğiniz filtreleme sonra arayın gelmez bir fonksiyon yazmak

array_filter($array1, "custom_filter");