PHP如何在循环内合并两个数组

时间:2014-06-09 05:18:36

标签: php arrays merge

我对下面的代码有问题,这让我发疯了。我想要做的是比较一个给定的数组和一个句子,然后我需要知道它们在每个出现的句子中的位置,现在脚本只返回一个数组,例如名称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));

1 个答案:

答案 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
)