我有文字誰看起來像這樣索引詞
* MMM *我們有一隻狗
* PPP *我們回家
* SSS *我們已經回家
在本文中,*
之間的文本是對第nr頁和第nr行的書的參考。在這種情況下,我只是把它縮小爲三個字母。
我想創建與每個字作爲密鑰和行號作爲值的數組:
Array
(
[we] => Array
(
[0]=>*mmm*,
[1]=>*ppp*,
[2]=>*SSS*
)
[have] => Array
(
[0] => *mmm*,
[1] => *SSS*
)
)
等....
其次我想創建與兩個詞的陣列以下彼此鍵和行號作爲值
Array
(
[we have] => array([0] => *mmm*, [1] => *SSS*),
[have a] => array([0 => *mmm*),
[a dog] => array([0] => *mmm*),
[dog we] => array([0] => *mmm*),
[we are] => array([0] => *ppp*)
)
注意,當兩個詞不在同一行(如在[dog we]
)它是第一個字的參考應該用作價值。
我想我找到了第一個問題的解決方案。我在改造一個數組 $text = array ([0]=>*mmm*, [1]=>"we", [2]=>"have",
等文本...
然後:
foreach ($text as $word)
{
if($word[0] == "*")
{
$value = $word;
continue;
}
else
{
$key = $word;
if (array_key_exists($key,$dictionary))
{
array_push($dictionary[$key], $value);
}
else
{
$dictionary[$key] = array($value);
}
}
return $dictionary;
爲創建有兩個單詞的數組的我做了以下
foreach ($text as $word)
{
if($word[0] == "*")
{
$value = $word;
continue;
}
else
{
$key1 = $word;
$key2 = $text[array_search($key1,$text)+1];
if ($key2[0] == "*")
{
continue;
}
else
{
$key = $key1.$key2;
if (array_key_exists($key,$dictionary))
{
array_push($dictionary[$key], $value);
}
else
{
$dictionary[$key] = array($value);
}
}
return $dictionary;
}
這不起作用,因爲$key = $key1.$key2;
。看來,當關鍵是[we have]
(如我們的文本中mmm)和稍後的關鍵應該是[we are]
該程序沒有什麼區別。實際上,每當第一個單詞是「我們」時,即使它應該是「是」,他也會自動添加第二個單詞「have」。因此,這意味着在查看文本中的每個單詞時,$ key1不會被重新設置爲零,但每當第一個單詞是「我們」時,該值將被置於「我們有」的關鍵字下。
任何人都有這個解決方案,或者整個事情可以做得更簡單?
PS我希望我沒有忘了許多{}
我沒有一個很好的概述
你可以嘗試減少你的代碼?您不需要檢查密鑰是否已經存在於'Array'中,只需使用'array_key_exists'和'array_push'寫入'$ dictionary [$ key] [] = $ value'而不是if-block。接下來,第一個塊看起來不完整,缺少一個'}',就像你已經假設的那樣。請檢查。 – hakre