質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • PHP

    21270questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Excel

    1629questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

PHP 【プログラミング】ロジックや数値の作り方・扱い方の、基本や考え方について

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 437

hiro0208

score 46

現在phpで日付取得や処理について学習しているのですが、

今月の選択された曜日から日付を出す。という内容で

$day += ($num - 1) * 7;//曜日の数から日付求める

というところの

($num - 1) * 7

入力された第$num週から1を引いて7をかけ、
曜日の値に加算していくことで、当月の日付を出すという、

このような数字の作り方(鶴亀算みたいな?)に気づいたり、発想することがまだ苦手です。
早くこのようなものに慣れたいのですが、
これは基本的な算数を改めて学習していくことで
身につけていくものでしょうか?

それとも演繹的や帰納的に論理を考えていくことで発想していく必要があるものでしょうか?
自分の頭が固いなぁという実感があり、ロジックを考えるのが億劫にもなります。
やる気はあるんですが 笑

また調べていたら
事務処理の実務などで、エクセルのVBAを使うところでは基本的なことのようですね。
私は情報処理の学習は、基本情報くらいでしか学んでおりませんが、
今後、プログラムの基本を押さえて上手くなりたいです。

追記
数をこなしパターンを覚えていくことも大事ですが、
自分の頭でしっかり考えていくことも合わせて大事であると書きながら思いました。。。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>sample</title>
</head>
<body>
<?php
//第何日
for ($i = 1; $i <= 5; $i++) {
    $option_num .= '<option value="' . $i . '">' . $i . '</option>' . "\n";
}
//曜日のプルダウン
?>
<form action="" method="post">
第<select name="num">
<?php echo $option_num; ?>
</select>
<select name="week">
<option value="0">日</option>
<option value="1">月</option>
<option value="2">火</option>
<option value="3">水</option>
<option value="4">木</option>
<option value="5">金</option>
<option value="6">土</option>
</select>曜日
<input type="submit" name="btn" value="送信">
</form>
<?php
$year = date('Y');    //年
$month = date('n');    //月
if (isset($_POST['btn'])) {
    $num = $_POST['num'];
    $select_week = $_POST['week'];
    //1から7日までの日付を取得する
    for ($i = 1; $i <= 7; $i++) {
        $timestamp = mktime(0, 0, 0, $month, $i, $year);//第6引数は今年のため省略OK
        $week = date('w', $timestamp);
        if ($week == $select_week) {
            $day = $i;
        }    
    }
    //
    $day += ($num - 1) * 7;//曜日の数から日付求める
    $last = date('t');
    if ($day <= $last )  {
        echo $day . '日' . "\n";
    }
    else { 
        echo '該当する日がありません。' . "\n";
    }
}
?>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+3

こういうのは論理的思考の積み重ねもあれば、いわゆる「神が下りてくる」ようにひらめくこともあるので、一概には言えないです。
一つ言えるとすれば、「何事も考える癖をつけよう」くらいですかね。

ちなみに PHP では 'first sunday of 2017-03' なんて書式が使えたりします。
※これで2017-03-05 が返ってきます

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/31 14:46 編集

    <「神が下りてくる」笑
    ありがとうございます!
    何を作りたいのか、という目的を見失って手段に没頭していると、このようになるとも
    ふと思いました。

    キャンセル

  • 2017/03/31 17:02

    もうひとつ。没頭しすぎると視野狭窄に陥り、自明のことがすこーんと出てこなくなります。これに徹夜作業による思考力の低下が加わると、もう効率なんてありはしません。デバッグ作業で徹夜するのは、時間だけかかってまったく作業が進まないという、非常に悲惨なことになります(なのにそういう作業やるところ多いんですよねえ……)
    実際、ファイルポインタの閉じ忘れという簡単なバグを、2日間徹夜して見つけられなかったことがあります。どうしようもなくなって2時間仮眠したら、1時間で発見から修正まで終わったという……早く直せと言ってくるのはいいけど、効率はどんどん落ちるんだから、きちんと休ませろ、っての。

    キャンセル

  • 2017/04/03 01:42 編集

    >バグを、2日間徹夜して見つけられなかった
    バグと対峙する事について考えさせられました。
    自分の論理がコンピュータに認識されず、その解決に再度自分(達)で挑む、これは過去の自分より賢くなっていないと解決しないわけですから大変なことですね。それも短期間で。そのためにも、この職種に学習は常に必要という事がよくわかります。そして、作るものが高度なものを目指せば、終わりはないものですね。
    また、プレッシャーがある中で、頭をクリアにするために休憩を入れるということや、頭使う思考系の仕事のデバッグ作業を効率的するという事も、単純に時間が計算できない事であり、学習とは違う視点で取り組まないといけない事ですね。プログラマー業の全体像も少し知ることができ、心構えとして大変為になりました。ありがとうございます!

    キャンセル

+3

少しPHPとは論点がずれているように思いますが

これは基本的な算数を改めて学習していくことで身につけていくものでしょうか?

これに対する回答として、私の経験で申し上げるなら必要ありません。

私は文系ですので、今でも数字が苦手です。
仕事上、統計学で歪度や尖度を出すなどをしなければならないのですが
文献読んでしっかり理解する時間が必要になってきます。

ただし、これは特異な分野になりますので、日常プログラミングでは必要ありません。

プログラミングに関して言えば、そのプログラミング言語がどのように理解して
どのように判断するからこのような結果になるとロジカル的に考えるように練習しています。

ですので、私が質問者さんのプログラミングソースを読んだとき何をしたかというと
1行ずつ目で見て上から読んでいき脳内で結果を出しています。
#これぐらいの行数ですと10秒あればできます。

これは経験(慣れ)と練習(努力)でカバーできます。
理系や文系の違いでスタート地点が違うかもしれませんが
努力すればいずれ逆転することができます。

最初は大変かもしれませんが、素晴らしいプログラマになれると思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/31 15:28

    >ロジカル的に考えるように練習しています。
    意識して身につけるようにしたいと思います。

    >1行ずつ目で見て上から読んでいき脳内で結果を出しています。
    これを面倒くさがるところがあるので、変えていきたいと思います。

    キャンセル

+3

自分の質問を引用してしまいますが、

ループ処理内の分岐処理のアルゴリズムを組むのが苦手

この質問の回答の中でmunyaXさんがこんな回答をくださいました。

プログラムは書けば書くほど自分の中で「定石」が生まれてきます。

ということで、やっぱりソースコードを書いたり読んだりするのがいちばんの近道の様です。それこそ「定石」ができるくらいに。

自分も定石がそれほど多くない人間ですが、その向上心は素晴らしいと思います。
お互い頑張りましょう。

以上、拙い回答ですが参考になれば嬉しいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/31 21:10

    >プログラムは書けば書くほど自分の中で「定石」が生まれてきます。
    囲碁や将棋みたいですね!

    >やっぱりソースコードを書いたり読んだりするのがいちばんの近道の様です。それこそ「定石」ができるくらいに。
    素晴らしいですね! 

    >お互い頑張りましょう。
    よろしくお願いいたします。

    キャンセル

+2

特殊な技術系の計算でない限り、基本は算数の応用だと思うので、改めて勉強し直すとかではないでしょうね。
法則をいかに閃くかでしょうかね。
知能テスト的な面があるかもしれません。

あとは経験を積むことでプログラミング脳になっていくかと思います。
初めてプログラムを組む人は、数字を1つずつ増やしていくことも難しいらしいじゃないですか。
頭の中では1、2、3…、と単純に数えられることを、コードに起こすときには違う発想が必要です。
a = a + 1
自分自身に1を加算したのを自分に代入する。
質問者さまはまあこれくらいのことは大丈夫だと思いますが、複雑な処理になった場合にスルッと閃くかどうかは経験値次第かなと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/31 15:26

    >法則をいかに閃くか
    常に、閃めいていたいですね 笑
    >あとは経験を積むことでプログラミング脳
    ありがとうございます。

    キャンセル

+1

いわゆるオンラインジャッジはロジックの勉強に向いていると思います。
言語の習得やアルゴリズムの学習に最適 オンラインジャッジサイト一覧(2016/12 版)

AOJ - オンライン プログラミング チャレンジは、簡単な問題からスタートできるのでお勧めです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/31 15:30

    >オンラインジャッジ
    参加している方、向上心があってかっこいいですね!
    見習いたいと思います。

    キャンセル

  • 2017/03/31 16:32

    参加するというよりも、ネット上に公開されている問題集を解いてみる、といった気楽な気持ちで始めてよいかと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    21270questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Excel

    1629questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。