2017-06-01 59 views
1

我以前的代碼是蘭特,這無關我目前的意圖,這是更換每當我找到一個值,該陣列的其他價值。在PHP中使用數組,如何總是通過key2更改key1或通過key1更改key2?

$myWords=array(
    array('funny','sad'), 
    array('fast','slow'), 
    array('beautiful','ugly'), 
    array('left','right'), 
    array('5','five'), 
    array('strong','weak') 
); 

$mycontentmixed = rewrite3($myVar, $myWords); 
$myVar = 'This girl is very funny and fast and kick to left'; 

當系統發現包含在陣列中的任意鍵的值,隨時切換到它的另一個值,我有這些系統準備好了,但它確實蘭特,有時落在上找到相同的密鑰,並在50%的情況下,它不值,我總是想改變。

我想更改爲:

output: 'This girl is very sad and slow and kick to right'; 

或者,如果你發現另一個關鍵:

$myVar = 'This girl is very sad and slow and kick to right'; 

切換到:

Output: 'This girl is very funny and fast and kick to left'; 

當的關鍵之一是在發現$ myVar變量總是爲另一個鍵進行交換。

謝謝。

+0

你有什麼試過?告訴我們你的代碼 – Raptor

+0

看看'strtr()'。你可以給它一個字符串和替換的關聯數組。 – Barmar

回答

1

Barmar是正確的,strtr()是這個任務的正確功能。由於$myWords陣列的結構不適用於strtr(),所以在準備過程中需要6次函數調用。如果$myWordsstrtr()一起聲明,則可以避免/減少這六個呼叫。

從本質上講,這可以是一個單功能溶液,並應被用來代替迭代條件檢查然後str_replace()

方法:

$myWords=array(
    array('funny','sad'), 
    array('fast','slow'), 
    array('beautiful','ugly'), 
    array('left','right'), 
    array('5','five'), 
    array('strong','weak') 
); 

// prepare values from $myWords for use with strtr() 
$replacements=array_combine(array_column($myWords,0),array_column($myWords,1))+ 
       array_combine(array_column($myWords,1),array_column($myWords,0)); 
echo strtr($myVar,$replacements); 

輸入/輸出:

$myVar='This girl is very funny and fast and kick to left'; 
//outputs: This girl is very sad and slow and kick to right 

    $myVar='This girl is very sad and slow and kick to right'; 
//outputs: This girl is very funny and fast and kick to left 

    $myVar='I was beautiful and strong when I was 5 now I\'m ugly and weak'; 
//outputs: I was ugly and weak when I was five now I'm beautiful and strong 

唯一額外的步驟是數組製備。我無法使用array_merge(),因爲數字字符串(5)在此過程中被清理。這是+串聯的原因。

+0

@ArianeMartinsGomesDoRego對方回答,使每'$ myWords'我的方法的迭代兩個函數調用做了最多7個函數調用和總只修改一次字符串。隨着$ myWords數組大小的增加,我的解決方案提高了效率。 – mickmackusa

+0

太棒了!謝謝! @mickmackusa的改進!你將如何處理多值數組,而不僅僅是一個開關? '陣列('滑稽','傷心','聰明','好學','勤奮','微妙');'......如何讓系統選擇這些選項中的任何一個?但總是做交換?我已經準備好了,但是蘭德經常在變量中已經存在的單詞的頂部,而且沒有任何變化!我希望不要把這個值包含在蘭特里,那個孩子發現蘭特'$ myVar ='這個女孩非常好學和微妙');'''在蘭特中排除微妙和勤奮,謝謝你的回答。 –

+0

@ArianeMartinsGomesDoRego請發佈一個新的單詞樣本數組,解釋如何替換它們,並顯示給定特定句子的預期輸出。 – mickmackusa

1

此代碼將做到這一點:

$myWords=array(
array('funny','sad') 
,array('fast','slow') 
,array('beautiful','ugly') 
,array('left','right') 
,array('5','five') 
,array('strong','weak') 
); 


$myVar = 'This girl is very funny and fast and kick to left'; 

foreach ($myWords as $key => $val) { 
    if (strpos($myVar, $val[0]) !== FALSE) { 
    $myVar = str_replace($val[0], $val[1], $myVar); 
    } 
    else { 
    $myVar = str_replace($val[1], $val[0], $myVar); 
    } 
} 
echo $myVar; 

希望這有助於。

+0

謝謝@Pranit傑哈我認爲這沒關係,我會做一個測試:-) - –

相關問題