Удалить ненужные слова из строки

#php

#php

Вопрос:

У меня есть CSV-файл для чтения, но в одном столбце есть несколько ненужных слов. Проще записать нужные слова в массив белого списка, чем создавать черный список. Это то, что я пробовал, но я получаю пустую ячейку. Следующий скрипт используется только тогда, когда индекс ячейки равен 5 (столбец, который мне нужно изменить).

 $whitelist[0] = "BLACK";
$whitelist[1] = "RED";
$whitelist[2] = "ON";
$whitelist[3] = "BLUE";
$whitelist[4] = "COLOR";
$whitelist[5] = "YELLOW";
$whitelist[6] = "GREEN";
$whitelist[7] = "CYAN";
$whitelist[8] = "MAGENTA";
foreach( $csv_line as $row ){
    $cell = explode(' ', $row[0]);
    foreach($cell as $b=>$v)
        if( !in_array($cell, $whitelist) )
            unset( $cell[$b] );
            $row[0] = implode(' ', $cell);
}  echo "<td>".$row[0]."</td>";
  

Любые советы будут оценены.

Спасибо, Себастьян

Комментарии:

1. Вот совет: используйте fgetcsv и fputcsv .

2. Спасибо за отличный совет. Я использую fgetcsv. $csv_line содержит строку из csv-файла. Даже без fgetcsv или fputcsv, $csv_line может содержать строку с разделителями.

Ответ №1:

измените строку
if( !in_array($cell, $whitelist) )
Для
if( !in_array($v, $whitelist) )
вы хотите проверить, не внесено ли значение $v в белый список, а не весь $cell массив

Комментарии:

1. @gion_13 спасибо за ваш ответ. но моя ячейка по-прежнему пуста, и я не знаю почему…

2. это должно сработать. попробуйте отладить свой код с помощью var_dump , чтобы проверить, не пуста ли ваша ячейка. Вы также могли бы повторить что-либо при достижении if инструкции, чтобы проверить, не занесены ли не все слова вашей ячейки в белый список.

3. я хочу проверить только 5-й столбец. теперь всю строку. это было бы проблемой?

4. это не должно нарушать ваш код. Но, если вы хотите проверить только 5-й столбец, не тратьте свои ресурсы на бесполезные итерации: не проверяйте foreach($cell as $b=>$v) , а проверяйте только на $cell[4]

5. я проверил переменные и во втором foreach $cell возвращает Array[0]=>… какая-то буква, но только одна буква. я предполагаю, что это форма начала каждой ячейки или слова