2014-06-09 105 views
0

我有一個問題,下面的代碼讓我發瘋。我想要做的是將一個給定的數組與一個句子進行比較,然後我需要知道它們在每個出現的句子中的位置,現在腳本只返回一個數組,例如Marta這個名字的位置在句子中找到。我試圖將所有結果合併成一個數組,但我現在有點失落。我希望有人能給我一些線索來實現它。最好的祝福。PHP如何合併一個循環內的兩個數組

$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)); 
+2

你重置'$每一個在posicion'的'foreach'陣列的每個迭代的開始。你應該在循環之外初始化它。 – Barmar

+0

謝謝Barmar,我並不理解bucle的工作流程。 – Pablete

+0

什麼是_bucle_? – Barmar

回答

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 
) 
+0

非常感謝你Kevinabelita,我真的很感謝你的幫助,它完美的工作;) – Pablete