我对下面的代码有问题,这让我发疯了。我想要做的是比较一个给定的数组和一个句子,然后我需要知道它们在每个出现的句子中的位置,现在脚本只返回一个数组,例如名称Marta是的位置在句子里面找到了。我试图将所有结果合并到一个阵列中,但此刻我有点迷失了。我希望有人可以给我一些线索来实现它。最好的问候。
$sentence = 'Maria is Maria and Marta is Marta.';
$womennames = array("Maria","Marta");
function poswomen($chain, $words){
foreach($words as $findme){
$valida_existe = substr_count($chain,$findme);
$largo_encuentra = strlen($findme);
$posicion = array();
for($x=0; $x < strlen($chain); $x++){
$posic_x = strpos($chain, $findme, $x);
if($posic_x >= 0){
$posicion[] = $posic_x;
$x = $x+$largo_encuentra;
}
}
$posicion = array_unique($posicion);
$posicion = implode(",",$posicion);
}
return $posicion;
}
poswomen($sentence, $womennames);
print_r (poswomen($sentence, $womennames));
答案 0 :(得分:1)
就像barmar所说,你的位置不断重置你需要将它设置在外面,然后添加当前找到的位置以便它继续。考虑这个例子:
$sentence = 'Maria is Maria and Marta is Marta.';
$women_names = array('Maria', 'Marta');
$pos = 0;
$positions = array();
foreach($women_names as $name) {
while (($pos = strpos($sentence, $name, $pos))!== false) {
$positions[$name][] = $pos;
$pos += strlen($name);
}
$positions[$name] = implode(', ', $positions[$name]);
}
echo '<pre>';
print_r($positions);
echo '</pre>';
示例输出:
Array
(
[Maria] => 0, 9
[Marta] => 19, 28
)