古人云: "紙上得來終覺淺 絕知此事要躬行."
程式設計是一門手藝活, 需要不斷練習和實戰才能學的好. PHP基礎尤其重要, 要練習加深對PHP理解. 找了幾個線上程式設計題庫, 但都不支援PHP, 最後選中了CodeWar這個網站, 作為我練習PHP程式設計的.
打怪升級, 從此開始. 每天一道程式設計題目, 鍛鍊自己PHP能力, 順便鍛鍊英文能力, 一舉兩得. 寫完一道題目, 會分析自己思路和對比別人思路, 作成筆記加深印象. 比如有一道題目是用字母表數字替換字串的字元 alphabet_position.題目如下:
In this kata you are required to, given a string, replace every letter with its position in the alphabet. If anything in the text isn't a letter, ignore it and don't return it. As an example:
alphabet_position('The sunset sets at twelve o\' clock.');
Should return "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11" as a string.
我的程式碼是這樣子:
function alphabet_position(string $s): string
{
// 字母表陣列
$letterArr = [1 => 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
// 將引數$s全部小寫, 轉換為目標陣列
$targetArr = str_split(strtolower($s));
$result = '';
// 迴圈目標陣列
foreach ($targetArr as $value) {
// 迴圈字母表陣列
foreach ($letterArr as $k=>$v) {
// 比較兩個陣列中值,若相等, 取出字母表陣列中鍵
if ($value == $v) {
$result .= $k.' ';
}
}
}
// 去除右邊空格.
return rtrim($result);
}
我的思路: 用26個字母陣列去對比引數陣列, 符合則返回字母陣列的鍵. 而別人思路讓我學習一些知識和PHP用法.
function alphabet_position_clever(string $s): string
{
$value = '';
// 根據正規表示式排除非字元的字串, 轉換為目標陣列, 並迴圈
foreach(str_split(preg_replace('/[^a-z]/i', '', $s)) as $letter) {
// 求每個大寫英文字元 ASCII 碼值.
// A在ASCII表是第65,依次排序25個字母,所以要減去64得到26個字母表正確數字
$letterToNumber = ord(strtoupper($letter)) - 64;
// 拼接字串
$value .= " {$letterToNumber}";
}
return trim($value);
}
因此練習程式碼和看別人程式碼可以幫助自己提高程式設計能力. 若有新的思路, 歡迎留言或者在我的github專案留言.
每天都會在github提交一道題目,積少成多. 也歡迎能提供新的看法或者思路讓我學習.萬分謝謝.
文筆不好, 請多見諒.
本作品採用《CC 協議》,轉載必須註明作者和本文連結