我試圖做和絃轉位和絃PHP的值數組作爲跟隨...PHP - 字符串替換
$chords1 = array('C','C#','D','D#','E','F','F#','G','G#','A','A#','B','C','Db','D','Eb','E','F','Gb','G','Ab','A','Bb','B','C');
一個例子是D6/F#。我想匹配數組值,然後將其轉置數組中的給定數字位置。以下是我迄今爲止...
function splitChord($chord){ // The chord comes into the function
preg_match_all("/C#|D#|F#|G#|A#|Db|Eb|Gb|Ab|Bb|C|D|E|F|G|A|B/", $chord, $notes); // match the item
$notes = $notes[0];
$newArray = array();
foreach($notes as $note){ // for each found item as a note
$note = switchNotes($note); // switch the not out
array_push($newArray, $note); // and push it into the new array
}
$chord = str_replace($notes, $newArray, $chord); // then string replace the chord with the new notes available
return($chord);
}
function switchNotes($note){
$chords1 = array('C','C#','D','D#','E','F','F#','G','G#','A','A#','B','C','Db','D','Eb','E','F','Gb','G','Ab','A','Bb','B','C');
$search = array_search($note, $chords1);////////////////Search the array position D=2 & F#=6
$note = $chords1[$search + 4];///////////////////////then make the new position add 4 = F# and A#
return($note);
}
這工作,但問題是,如果我使用一個分裂的和絃像(D6/F#)弦被置換爲A#6/A#。它用(F#)代替第一個音符(D),然後用(A#)代替兩個(F#)。
問題是......我怎樣才能避免這種冗餘發生。期望的輸出將是F#6/A#。感謝您的幫助。如果解決方案已發佈,我會將其標記爲已回答。
我怎麼能一個變量添加到回調數... 4 –
我不明白的問題。 你想檢測G#4,G#6,G#7嗎? 試試這個僞正則表達式「/...|(G#)([0-9]+)?|.../」 或者如果你不想不存在的和絃,你可以手動放置所有的變化「/ .. 。|(G#)(4 | 6 | 7 ... | 11 | ...)?| ... /「 在轉置NoteCallback中,您將在$ match [1] G中有,然後您必須檢查如果計數($匹配)== 2,如果條件爲真,您可以從$匹配[2] – Igor
挑選號碼我終於得到了我所需要的。謝謝!我想要檢測它是否是#鍵或b鍵而不是音符檢測。 –