#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]=>… какая-то буква, но только одна буква. я предполагаю, что это форма начала каждой ячейки или слова