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

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

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

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

Q&A

解決済

3回答

1634閲覧

PHP:9以下の数字だけ空白をつけたいです

kotouharuto

総合スコア38

PHP

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

0グッド

0クリップ

投稿2020/10/23 07:41

編集2020/10/23 07:44

実現したいこと

イメージ説明
このような九九表で1~9の数字に半角スペースをつけて二桁の数字と行を揃えたいです

起きている問題

一桁の数字だけに空白をつけることができないです

試したこと

ifを使って9以下の数字を条件として、str_pad()などで空白を付けようと試みたのですが、うまくいかずでした。

該当のソースコード

php

1<?php 2echo '<table>'; 3for($i = 1; $i <= 9; $i++) { 4 echo '<tr>'; 5 for($s = 1; $s <= 9; $s++) { 6 $num = $i * $s; 7 echo '<td>'; 8 echo ' '.$num; //ここの空白は全角空白です 9 echo '</td>'; 10 } 11 echo '</tr>'; 12} 13echo '<table>'; 14

以上です。
わかる方がいらしたらご回答よろしくお願いします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

1~9の数字に半角スペースをつけて二桁の数字と行を揃えたいです

ふつうにHTMLを出力した場合、スペースを入れても揃いません

<td>text-align: rightをかけてスタイルシートで処理するのが手っ取り早いですし適切です。

投稿2020/10/23 07:43

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/10/23 07:45

最初に「echo '<table style="text-align: right;">';」とすれば、(他のスタイルがない場合)中まで継承されて全セルが右揃えになります。
kotouharuto

2020/10/23 07:47

ご回答ありがとうございます。 自分の記入漏れで申し訳ないのですが、できればphpの関数などで解決したいです。 そちらの方法で成功しました。
maisumakun

2020/10/23 07:51

> できればphpの関数などで解決したいです。 「HTMLで出力結果を得たい」ということであれば「HTMLで修飾する」のが正しい解決策です。PHPで出した文字と、HTML上の表示は、(<pre>など特殊な環境なら別ですが)正確に対応するものではありません。
maisumakun

2020/10/23 07:56 編集

正しく「str_pad()などで空白を付け」たとしても、それはHTMLで意図した役割を果たしません。 通常のスペース以外の見えない文字を突っ込んで幅を取るなどの無理やりな手段を取るのでなければ、HTMLとしての表示の調整は、PHP単体でできることではありません。
kotouharuto

2020/10/23 08:00

そうなのですね、了解いたしました。
kotouharuto

2020/10/23 08:00

ではcssなどで揃えることにしようと思います。
guest

0

レイアウトの話ですので、PHP度外視でHTMLを組んでから(”モック”と言います)、PHPよりその通りのHTMLを出力するようにしてください。
例えスペースを入れたとして、桁が増えればずれます。そのたびに「最終桁」から「出力する値」の桁数を計算してスペースを入れるのは現実的ではありません。フォントも影響するのでPHPの機能だけでレイアウトをどうにかしようとするのはそもそも間違いですし、「揃う」ことはありません。

ちなみに半角スペースはHTML上でその通りに出ることはないです。
強いてなら&nbsp; (HTMLエンティティ) の利用
ですが、結局これはHTMLの話でありPHPの話ではありません。

投稿2020/10/23 07:47

編集2020/10/23 07:58
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kotouharuto

2020/10/23 07:59

ご回答ありがとうございます。 そうなのですね、参考にさせていただきます。
m.ts10806

2020/10/23 08:05 編集

定型的なコメントのようなので、何について「そうなのですね」と言っているのか、どこまで理解されたのか分かりませんが、 Webブラウザから実行するアプリケーションを作る限りはHTMLを最低限以上身につけていおかないことにはどうにもならないと思います。
kotouharuto

2020/10/23 09:54

ご教示いただいたことを理解した上で「そうなのですね」と言っています。 ですが、確かにその通りなので次回の質問からはある程度気を付けようと思います。ご親切にありがとうございます。 PHPの機能でレイアウトを操作することはナンセンスということもしっかり理解できました。 僕自身PHPをやる上でHTMLは完全にとまではいきませんが、HTMLの技術も身につけているつもりですが、今回のことに関しては理解漏れがあったのでそこについてはしっかり学習し直します。
m.ts10806

2020/10/23 10:10

PHPでレイアウト操作はそもそもできませんよ。ブラウザ上で確認する以上、HTMLです。回答の最後に書いたとおり。 Webはそのあたりの感覚を確実に分かってないとかなり厳しいと思います。(teratailの質問者には非常に多い)
guest

0

半角スペースではHTML上の表示は基本的に変わりません。

見た目に関しては他の回答通りCSSで対応する(か、0で揃えるとか)方が正しいです。
(見た目に関わる文字列をHTMLの中に入れてしまうと、HTMLの文書としての正しさが損なわれます)

が、どうしても半角スペースで揃えたいのであれば、半角スペースのHTMLエンティティである
&nbsp;
を指定することで半角スペースとして描画してくれるので、
PHPでそうなるように出力すれば可能です。(str_pad()では出来ないので、表示する箇所で9以下の整数であることを判定して文字列として追加するような形ですね)

例)以下のHTMLをそれぞれブラウザで開いてみて表示を確認してみてください。

HTML

1<html> 2 <body> 3 <table> 4 <tr><td> 1<td></tr> 5 <tr><td>10<td></tr> 6 </table> 7 </body> 8</html>

HTML

1<html> 2 <body> 3 <table> 4 <tr><td>&nbsp;1<td></tr> 5 <tr><td>10<td></tr> 6 </table> 7 </body> 8</html>

投稿2020/10/23 08:08

編集2020/10/23 08:10
tanat

総合スコア18727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/23 08:12

昔は大量に&nbsp;投入して調整とか平気でやってましたよね・・ 今は1つでもあるとモヤっとする。
tanat

2020/10/23 08:19

> 昔は大量に&nbsp;投入して調整とか平気でやってましたよね・・ 私も覚えがありますw CSSの互換性も微妙でしたしね。 > 今は1つでもあるとモヤっとする。 「文字列としての半角スペースを表示しないといけない時」となると固有名詞とかアルファベットの熟語とかですかね。 ライセンス表記をHTML内でする時とかはありそうな気もします。
m.ts10806

2020/10/23 08:21

間に入るような Copyright © hogehoge のところくらいなら英文の単語区切りレベルなので半角スペースでやるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問