如何使用PHP获取文本中单词数组的第一次和最后一次出现?

如何使用PHP获取文本中单词数组的第一次和最后一次出现?,php,string,Php,String,我想做的是在$arr中的$text中查找每个单词的第一个/最后一个出现索引,如何在PHP中高效地执行它?我想您需要的是数组\u键 你可以用各种方法得到最后一个,一种方法是计算元素,然后回显最后一个 Array ( [0] => 0 [1] => 3 [2] => 4 ) echo 'First '.$keys[0] will echo the first. 上述示例将输出: <?php $array = array("blue", "red",

我想做的是在
$arr
中的
$text
中查找每个单词的第一个/最后一个出现索引,如何在PHP中高效地执行它?

我想您需要的是
数组\u键

你可以用各种方法得到最后一个,一种方法是计算元素,然后回显最后一个

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

echo 'First '.$keys[0] will echo the first.
上述示例将输出:

<?php
$array = array("blue", "red", "green", "blue", "blue");
$keys = array_keys($array, "blue");
print_r($keys);
?>
    $count = count($keys);
    echo ' Last '.$keys[$count -1]; # -1 as count will return the number of entries.

您可以使用并与一个简单的
foreach
循环结合使用来实现这一点。

strpos
基于方法的方法不会告诉您单词的位置,它们只能找到文本的子字符串。尝试使用正则表达式:

First 0 Last 4
这将生成如下的单词位置图

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);


是否有像
strpos
strrpos
这样的内置函数,但需要一组单词作为输入?@Runner:据我所知没有,但这并不意味着什么。=)因此,没有像
strpos
strrpos
这样的内置函数,而是需要一组字作为输入?不,您必须这样做(或类似的操作)。当然,你可以自己编写一个函数,它可以完全满足你的需要。这不是一个很难或很大的代码拼图。这正是我想要的,但还有一个问题,如果这个数组的项是另一个数组,那么你有什么建议?数组(数组(“whatISearch”=>黑色)、数组(“whatISearch”=>白色)、数组(“whatISearch”=>黑色)、数组(“whatISearch”=>黄色)、数组(“whatISearch”=>白色”),所以我需要找到最后一个“黑色”位置。
$firstPosOfEachWord = array_map('min', $map);
<?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);
}
?>