2013-05-10 2 views
0

Этот вопрос является продолжением моего предыдущего вопроса:Получить индекс из текста с помощью PHP

Check tag & get the value inside tag using PHP

У меня есть текст, как это:

<ORGANIZATION>Head of Pekalongan Regency</ORGANIZATION>, Dra. Hj.. Siti Qomariyah , MA and her staff were greeted by <ORGANIZATION>Rector of IPB</ORGANIZATION> Prof. Dr. Ir. H. Herry Suhardiyanto , M.Sc. and <ORGANIZATION>officials of IPB</ORGANIZATION> in the guest room. 

с кодом ответа от моего вопроса до и PREG_OFFSET_CAPTURE добавлено вот так:

я получаю выход:

Array (
[0] => Array ([0] => Глава Pekalongan Regency [1] => 14)
[1] => Массив ([0] => ректор IPB [1] => 131)
[2] => Array ([0] => должностные лица IPB [1] => 222))

14, 131 , 222 - индекс символа при сопоставлении шаблона. Могу ли я получить индекс слова? То есть выходной сигнал, как это:

Array (
[0] => Array ([0] => Глава Pekalongan Regency [1] => 0)
[1] => Array ([ 0] => ректор ИПБ [1] => 15)
[2] => Array ([0] => сотрудники ИПБ [1] => 27))

есть ли другой способ чем PREG_OFFSET_CAPTURE или нужен еще код? Понятия не имею. Спасибо за помощь. :)

+0

Нет, нет встроенного - в поддержку получения индекса слова. Если это действительно важно (вы не уточнили * почему *, поэтому я предполагаю, что это не так), вам нужно потратить некоторую работу. С учетом строковых индексов, которые у вас уже есть, вы можете сравнить их со списком позиций слов, которые должны быть приобретены во втором 'preg_match_all ('/ \ w + /''. (Хотя требуется сначала вытеснить теги с пробелами). – mario

+0

О, извините за мой нерепрезентативный вопрос. На самом деле у меня проблема с проверкой фразы типа «красное яблоко» или «синее яблоко». Обе фразы имеют «яблоко», но мы не знаем, какое красное или синее «яблоко», которое приходит первым, если просто используйте 'preg_match_all ('/ \ w + /''. – andrefadila

ответ

1

Это будет работать, но нужно будет немного заканчивал:

<?php 

$raw = '<ORGANIZATION>Head of Pekalongan Regency</ORGANIZATION>, Dra. Hj.. Siti Qomariyah , MA and her staff were greeted by <ORGANIZATION>Rector of IPB</ORGANIZATION> Prof. Dr. Ir. H. Herry Suhardiyanto , M.Sc. and <ORGANIZATION>officials of IPB</ORGANIZATION> in the guest room.'; 

$result = getExploded($raw,'<ORGANIZATION>','</ORGANIZATION>'); 

echo '<pre>'; 
print_r($result); 
echo '</pre>'; 

function getExploded($data, $tagStart, $tagEnd) { 
    $tmpData = explode($tagStart,$data); 
    $wordCount = 0; 
    foreach($tmpData as $k => $v) { 
     $tmp = explode($tagEnd,$v); 
     $result[$k][0] = $tmp[0]; 
     $result[$k][1] = $wordCount; 
     $wordCount = $wordCount + (count(explode(' ',$v)) - 1); 
    } 
    return $result; 
} 

>

И результат:

Array 
(
    [0] => Array 
     (
      [0] => 
      [1] => 0 
     ) 

    [1] => Array 
     (
      [0] => Head of Pekalongan Regency 
      [1] => 0 
     ) 

    [2] => Array 
     (
      [0] => Rector of IPB 
      [1] => 16 
     ) 

    [3] => Array 
     (
      [0] => officials of IPB 
      [1] => 28 
     ) 

    ) 
+0

Да, отлично, это работа, спасибо. Что в массиве индекса 0? – andrefadila

+0

индексный массив 0 является «пустым», потому что 'explode()' выполняется на первом ' $ tagStart', который, как оказалось, также является первой частью данных '$ raw'. Сдвиньте сначала' 'или поместите некоторый текст перед ним и посмотрите, что произойдет. drop index 0, чтобы исправить проблему. – Tigger

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