Как получить первый и последний вхождение массива слов в текст с использованием PHP? - PullRequest
0 голосов
/ 12 апреля 2010
$arr = array('superman','gossipgirl',...);


$text = 'arbitary stuff here...';

Что я хочу сделать, это найти первый / последний вхождения индекса каждого слова в $arr в $text, как это эффективно сделать в PHP?

Ответы [ 4 ]

4 голосов
/ 12 апреля 2010

То, что я думаю, вы хотите, это array_keys http://uk3.php.net/manual/en/function.array-keys.php

<?php
$array = array("blue", "red", "green", "blue", "blue");
$keys = array_keys($array, "blue");
print_r($keys);
?>

Приведенный выше пример выдаст:

Array
(
    [0] => 0
    [1] => 3
    [2] => 4
)

echo 'First '.$keys[0] will echo the first.

Вы можете получить последние различные способы, одним из них будет подсчет элементов, а затем отобразить последний, например,

    $count = count($keys);
    echo ' Last '.$keys[$count -1]; # -1 as count will return the number of entries.

Приведенный выше пример выведет:

First 0 Last 4
3 голосов
/ 12 апреля 2010

Я думаю, что вы хотите:

<?php
$arr = array('superman','gossipgirl',...);
$text = 'arbitary stuff here...';
$occurence_array = array();


foreach ($arr as $value) {
    $first = strpos($text, $value);
    $last = strrpos($text, $value);
    $occurence_array[$value] = array($first,$last);
}
?>
1 голос
/ 12 апреля 2010
Методы, основанные на

strpos, ничего не скажут о словах позиций, они могут найти только подстрок текста. Попробуйте регулярные выражения:

preg_match_all('~\b(?:' . implode('|', $words) . ')\b~', $text, $m, PREG_OFFSET_CAPTURE);
$map = array();
foreach($m[0] as $e) $map[$e[0]][] = $e[1];

это генерирует карту положения слова как это

'word1' => array(pos1, pos2, ...),
'word2' => array(pos1, pos2, ...),

Получив это, вы можете легко найти первые / последние позиции, используя

$firstPosOfEachWord = array_map('min', $map);
0 голосов
/ 12 апреля 2010

Вы можете сделать это, используя strpos и strrpos вместе с простым циклом foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...