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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1851閲覧

substr()がちゃんと反映しない。なぜでしょうか?

syuichiroh

総合スコア4

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/08/26 13:13

編集2020/08/28 02:17

文字列順序を変える為にsubstrを使いました。
別コードで、同手順で出来たのに、
なぜか、今回は反映されません。
コードに不備があるのでしょうか?
また、もっとスマートな手法ってあるでしょうか?

<<詳細>>
最初はarray 1,5,6.
$implode_holiday = string(3)"156"
$repeat_holiday = string(18)"156156156156156156"
<<ここが謎↓>>
$sort_holiday = string(12)"156156156156"
最終 array 1,5,6,1,5,6,1,5,6,1,5,6,

php

1//$comon_holidayは配列です。 2if(isset($comon_holiday)){ 3 // 配列から文字列へ改 4 $implode_holiday = implode($comon_holiday); 5 // 複数文字へリピート$aaはリピート回数(6) 6 $repeat_holiday = str_repeat($implode_holiday,$aa); 7 //文字列をソート $bは6を指定 8 $sort_holiday = substr($repeat_holiday , $b); 9 // 配列化 10 $ary_holiday = str_split($sort_holiday); 11}

コード自体は500行位ありますが、変数に被りはありません。
影響する様な記述は見当たらないです。
よろしくお願いします。


<<追記、変更>>

ご指摘頂いた箇所を追記します。
解り辛い記述をして申し訳ありません。

「こういう入力に対して、こういう出力が欲しいが、こういう出力になってしまう」
$repeat_holiday = string(18)"156156156156156156"に対して
開始位置を最初の$b以降としたいのですが、
substr($repeat_holiday , $b);では出来なかった。

ご指摘によりsubstrでは出来ない事を知りました。有難うございます。
この場合、どの様に処理を進めればいいのでしょうか?
$repeat_holiday = string(18)"156156156156156156"
を、$b(string '6')を使って、"6156156156156156"としたいです。
$b の一文字は変動します。
例えば$bが"5"だった場合、求める数列は
"56156156156156156"としたいです。

立て続けの質問で申し訳ありません。
初心者で解決までの糸口が得られれば本望です。
よろしくお願いします。

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

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

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

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

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

otn

2020/08/26 13:21

やりたいことが不明です。 「こういう入力に対して、こういう出力が欲しいが、こういう出力になってしまう」 という風に書いて下さい。
Yasumichi

2020/08/26 13:43 編集

$sort_holiday = substr($repeat_holiday , $b); $b が 6 ということは、repeat_holiday の 7文字目以降すべてを $sort_holiday に代入するという動きになるはずです。なので $sort_holiday = string(12)"156156156156" は、substr の正常な動作です。 PHP: substr - Manual https://www.php.net/manual/ja/function.substr.php
退会済みユーザー

退会済みユーザー

2020/08/26 14:27

コードになっていない部分が曖昧で、どう再現すればいいか想像つきません。
退会済みユーザー

退会済みユーザー

2020/08/26 14:28

本筋からそれるけど、comon じゃなくて common だと思う
syuichiroh

2020/08/28 02:08

皆様、返信有難うございます。 yasumichi様、 substr を勘違いしておりました。正常な動きだとわかりました。有難うございます。自分のしたい処理はsbstrでは出来ないと知りました。 otn様、 解り辛い記述をして申し訳ありません。 「こういう入力に対して、こういう出力が欲しいが、こういう出力になってしまう」 $repeat_holiday = string(18)"156156156156156156"に対して 開始位置を最初の$b以降としたいのですが、 substr($repeat_holiday , $b);では出来なかった。 ↑yasumichi様の返答によりそもそもsubstr()では得られないと知りました。 この場合、どの様な処理が適切なのでしょうか。。。 m6u様、 恥ずかしながら、正にcommonでした。 即座に書き換えしましたw お恥ずかしい。。。
guest

回答1

0

ベストアンサー

文字列順序を変える為にsubstrを使いました。

おそらく勘違いじゃないですか?

PHP: substr - Manual

substr — 文字列の一部分を返す

どう考えても、順序を変えるような機能はないのですが。


再現のコードは、これでいいんだろうか?
しかし、これで何をやりたいのかさっぱりわからない。

php

1<?php 2 3$comon_holiday = [1,5,6]; 4$aa = 6; 5$b = 6; 6$ary_holiday = []; 7 8//$comon_holidayは配列です。 9if(isset($comon_holiday)){ 10 // 配列から文字列へ改 11 $implode_holiday = implode($comon_holiday); 12 // 複数文字へリピート$aaはリピート回数(6) 13 $repeat_holiday = str_repeat($implode_holiday,$aa); 14 //文字列をソート $bは6を指定 15 $sort_holiday = substr($repeat_holiday , $b); 16 // 配列化 17 $ary_holiday = str_split($sort_holiday); 18} 19 20var_export($ary_holiday); 21

1,5,6はなにかの曜日番号だと察するとして、
わざわざ連結して、6回繰り返すことによって増やして、
それを$bによって先頭の6文字を切り落として、
いったい何をしたいのだろう?

inputとoutputがはっきりしない仕様のままでは、
なんの助言もできません。


こういうこと?

php

1<?php 2 3$repeat_holiday = "156156156156156156"; 4$b = 6; 5echo substr($repeat_holiday, $b - 1);

6156156156156

phpでの文字位置の指定は、最も左の文字が0番目なので、
6文字目から後ろがほしいのであれば、
6-1にしないとおかしい。

投稿2020/08/26 14:33

編集2020/08/28 03:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

syuichiroh

2020/08/28 02:21

おっしゃる通り、substr を勘違いしてました。 すいません。 結局、どうすれば必要な値を得られるのかはわからないままで。。
syuichiroh

2020/08/28 04:03

早い返答有難うございます。 また、説明べたですいません。 推測された通り、0から6の数字は曜日を表しています。定休日の様にチェックボックスでチェックを入れた曜日がデータベースに入ります。一つだったり、複数だったり。それを156と想定し、その数字をsqlで取ってきてページにあるカレンダに表示させるのを課題としてます。 個人的な考えで進めているのは、月初め(8月1日)の曜日をdate’w’で持ってきて それと同じであればカレンダーの色を変えるというやり方です。 その際、例えば8月1日が6(土曜)とした場合、日付に60123456012.... と判別用の変数を用意しました。 これに対し、カスタマーが指定した定休が’156’と想定し、判定用変数と定休が==の時にLoopで作成されるカレンダーにhtmlを足す流れです。 ですので、phpの記述は一定で考えてます。6の記述に合わせてコードを変えるのでは無く、 6から数列がスタートする様に作りたいです。 賢くない方法だとは思うのですが、一旦 この手法で作ってみたいです。 「何か手があれば」と模索しております。  色々とすいません。 ご教授いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問