2015-12-18 5 views
0

Я использую Simple DOM HTML Parser PHP скрипт в том, что, как представляется, является простым способом, вот мой код:PHP и Simple DOM HTML Parser - Заменить идентичный текст строки

include('simple_html_dom.php'); 

$html = file_get_html($_SERVER['DOCUMENT_ROOT']."/wp-content/themes/genesis-sample-develop/cache-reports/atudem.html"); 

$snow_depth_min = $html->find('td', 115); 
$snow_depth_max = $html->find('td', 116); 
$snow_type = $html->find('td', 117); 

Проблема с $ snow_type. Иногда анализируемая текстовая строка является «polvo», а иногда она «polvo-dura». Я пытаюсь заменить «polvo» на «порошок», а «polvo-dura» - «порошок/упакованный». Если я что-то вроде

if ($snow_type->innertext=='polvo-dura') { 
    $snow_type->innertext('powder'); 
} 

или

$snow_type = str_replace("polvo", "powder", $snow_type); 
$snow_type = str_replace("polvo-dura", "powder/packed", $snow_type); 

он заканчивает с результатами, как «пороховой ТМО» и странные вещи, как это.

Очевидно, что я новичок в php, поэтому у меня есть некоторая склонность;) Я также хотел бы понять, почему это происходит и почему возможное решение будет работать.

Заранее спасибо

ответ

0

Временное решение, используя индексированные массивы с preg_replace():

$patterns = array(); 
    $patterns[0] = '/-/'; 
    $patterns[1] = '/polvo/'; 
    $patterns[2] = '/dura/'; 
    $replacements = array(); 
    $replacements[0] = '/'; 
    $replacements[1] = 'powder'; 
    $replacements[2] = 'packed'; 

    $snow_type_spanish_english = preg_replace($patterns, $replacements, $snow_type); 

У меня есть серьезные опасения о том, как она будет работать в реальном мире долго сложных текстов, но для данных короткого типа, таких как «тип снега» со значениями типа «a», «b», «a/b» или «b/a», это может быть просто отлично.

Было бы здорово, если бы у кого-то было лучшее решение. Я искал по всему Интернету несколько дней и не нашел каких-либо конкретных решений для текстовых значений с теми же словами в начале, например, «порошок» и «порошковая упаковка».

1
if ($snow_type->innertext=='polvo-dura') { 
    $innertext = 'powder/packed'; 
} else if ($snow_type->innertext=='polvo') { 
    $innertext = 'powder'; 
} 
+0

Спасибо за ваш ответ Кришна, я тоже попробовал это и подумал, что это очевидное правильное решение, но оно ничего не делает. Это должно, но нет. С $ snow_type, являющимся «polvo-dura», он показывает только это, игнорируя инструкции «if». – Karls

Смежные вопросы