2014-11-14 2 views
0

У меня есть массив, который мне нужно фильтровать. Я хотел бы, чтобы отфильтровать с массивом слов для того, чтобы иметь новый массив без того «слов»Как фильтровать массив с другим массивом

Array 
(
[0] => Array 
    (
     [occurence] => 17 
     [word] => sampleword 
    ) 

[1] => Array 
    (
     [occurence] => 14 
     [word] => sampleword1 
    ) 

[2] => Array 
    (
     [occurence] => 14 
     [word] => sampleword2 
    ) 
[3] => Array 
    (
     [occurence] => 14 
     [word] => sampleword3 
    ) 
) 

У меня есть одна функции, которая работает довольно хорошо, но только для одного «слов»

function words_not_included($w) { 
    $not_included  = 'sampleword1'; 
    return $w['word'] != $not_included; 
} 

затем я применил

$new_array = array_filter($old_array, "words_not_included"); 

Так он работает с одним словом

Как иметь массив из запрещенных " Слова как:

$forbidden_words = array('sampleword1','sampleword3'); 

, а затем фильтр с ними и выводить новый массив так:

Array 
(
[0] => Array 
    (
     [occurence] => 17 
     [word] => sampleword 
    ) 

[1] => Array 
    (
     [occurence] => 14 
     [word] => sampleword2 
    ) 

) 

ответ

1

При существующем использовании кода in_array:

function words_not_included($w) { 
    $not_included = array('sampleword1', 'sampleword3'); 
    return !in_array($w['word'], $not_included); 
} 
+0

, который возвращает только истинным или ложным, а не массив, оп хотите иметь – Giwwel

+0

@ Giullel: Если вы прочитали вопрос, OP использует 'array_filter', который нуждается в истинном или ложном возвращении. – AbraCadaver

0

Если я вас правильно понял , у вас есть 2 массива, и вы хотите, чтобы первый массив не содержал никаких слов во втором массиве.

Например, если у вас в качестве первого массива ['ball', 'pie', 'cat', 'dog', 'pineapple'] и ['ball', 'cat'] в качестве второго массива , вы хотите, чтобы результат был ['pie', 'dog', 'pineapple']

In_array() позволяет передавать массив, чтобы вы могли сравнивать несколько значений вместе. На основе текущего кода, который вы могли бы сделать что-то вроде этого:

function words_not_included($allWords, $ignoreWords) { return !in_array($ignoreWords, $allWords); }

+0

Как назвать это с помощью 'array_filter'? – AbraCadaver

+0

вам нужно использовать array_filter? это не сложно сделать – aashnisshah

+0

У меня нет, но у ОП это было в вопросе. – AbraCadaver

0

попробовать, как этот

function words_not_included($inputArray, $forbiddenWordsArray){ 

$returnArray = array(); 

//loop through the input array 

for ($i = 0; $i < count($inputArray);$i++){ 

    foreach($inputArray[$i] as $key => $value){ 
     $allowWordsArray = array(); 
     $isAllow = false; 

     //only the word element 
     if($key == "word"){ 

      //separate the words that will be allow 
      if(!in_array($value,$forbiddenWordsArray)){ 
       $isAllow = true; 
      } 
     } 

     if ($isAllow === true){ 
      $returnArray[] = $inputArray[$i]; 
     } 

    } 
} 

return $returnArray; 
} 


$inputArray = array(); 
$inputArray[] = array("occurence" => 17, "word" => "sampleword"); 
$inputArray[] = array("occurence" => 17, "word" => "sampleword1"); 
$forbiddenWords = array("sampleword"); 

var_dump(words_not_included($inputArray, $forbiddenWords)); 
Смежные вопросы