2017-03-28 96 views
-1

我的for循環應該將9個值添加到數組中,但出於某種原因停止在6上。這隻發生在使用方括號語法添加鍵和值給數組。這裏的代碼:For循環不會爲數組添加正確數量的值

 $sentences = $this->sentences($sentence); 
    $n = count($sentences); 
    echo $n; 
    $values = array(); 
    for($i = 0; $i < $n; $i++){ 
     $s1 = $sentences[$i]; 
     for($j = 0; $j < $n; $j++){ 
      $s2 = $sentences[$j]; 
      $values[$i][$j] = $this->checkvalues($s1,$s2); 
     } 
    } 
    $sentences_dic = array(); 
    $other = array(); 
    $otherTwo = array(); 
    for($i = 0; $i < $n; $i++){ 
     $score = 0; 
     for($j = 0; $j < $n; $j++){ 
      $score = $score+$values[$i][$j]; 

     } 
     $other[$i] = $score; 
     $otherTwo[$i] = $sentences[$i]; 
     $sentences_dic[($sentences[$i])]=$score; 
     var_dump($otherTwo); 
    } 
    //maybe need 
    return $sentences_dic; 

我不知道爲什麼會發生這種情況。該陣列僅打印 以下是它正在打印的內容。它應該印刷第七,第九和第九條款,但它沒有。所有未添加的術語都能夠在另一個和其他兩個陣列中打印。

Array 
(
[first] => banana 
[second] => banana2 
[third] => banana3 
[fourth] => banana4 
[fifth] => banana5 
[sixth] => banana6 
) 

它應該打印所有9個值和鍵。我不明白爲什麼我能夠將所有句子和分數全部添加到兩個單獨的陣列中(9),但是當我嘗試使用方括號語法時,它只會變爲6.

+2

我們沒有看到,或者你如何聲明'$ values' ,'$ other','$ otherTwo','$句子'和'$句子_dic'。請提供[mcve]。 – domsson

+2

'$句子'有重複。 – AbraCadaver

+0

哦,很好地發現@AbraCadaver!我小費我的帽子。其他的東西(不相關的):'$ sentences_dic [($ sentences [$ i])]''可以簡化爲'$句子_dic [$句子[$ i]]'(沒有常規括號)。 – domsson

回答

0

給定您的輸出$sentences似乎是一個數組並且有重複。數組密鑰必須是唯一的,重複的密鑰將被覆蓋。

你可以爲一個多維數組做這樣的事情:

if(isset($sentences_dic[$sentences[$i]])) { 
    $sentences_dic[$sentences[$i]][] = $score; 
} else { 
    $sentences_dic[$sentences[$i]] = $score; 
} 

或者總結重複的分數:

if(isset($sentences_dic[$sentences[$i]])) { 
    $sentences_dic[$sentences[$i]] += $score; 
} else { 
    $sentences_dic[$sentences[$i]] = $score; 
}