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

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

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

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

Q&A

解決済

1回答

1154閲覧

配列のソートがうまく行かない。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2021/05/28 14:43

編集2021/05/29 14:19

php

1<?php 2 3if (isset($_POST['hyouka'])){ 4$hyouka = $_POST['hyouka']; 5$log1 = filter_input(INPUT_POST,"a",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 6 7echo $hyouka."<br>"; 8 9$file_name = "log.txt"; /*読込ファイルの指定*/ 10$log0 = file( $file_name ); /*ファイルを全て配列に入れる*/ 11 12for($i = 0 ; $i < count($log0); $i++){ 13$log2[$i] = explode(",",$log0[$i]); 14} 15 16echo $log2[$hyouka][0]."<br>"; 17echo $log2[$hyouka][10]."<br>"; 18$log2[$hyouka][10]++; 19 20$str = ''; 21foreach($log2 as $card){ 22$str .= implode(',', $card); 23} 24 25$a = fopen("log.txt", "w"); 26fwrite($a, "$str"); 27fclose($a); 28} 29 30?>

log.txt
10,1,1,2,3,4,5,6,70,8,9
1,10,1,2,3,4,5,60,7,8,9
1,1,10,2,3,4,50,6,7,8,9
1,1,1,20,3,40,5,6,7,8,9
1,1,1,2,30,4,5,6,7,8,9

出力結果
1
1
9

log.txtの、$hyouka行目の、10列目の値を1増やしたいのですが、
一切変化がありません、どうすれば良いのでしょう、
キャスト等する必要があるのでしょうか・・・。

また、file_put_contents()でも上書きできるとのことで、それなら
$a = fopen("log.txt", "w");
fwrite($a, "$str");
fclose($a);
}
の代わりにfile_put_contents()を使いたいです。

長々と書きましたが、本質は、「配列のある要素の値を増やす」方法になります、それがうまくいきませんが・・・。

php

1if (isset($_POST['hyouka'])){ 2$hyouka = $_POST['hyouka']; 3$log1 = filter_input(INPUT_POST,"a",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 4 5var_dump($hyouka); 6echo "<p>"; 7 8var_dump($log1); 9echo "<p>"; 10 11$file_name = "log.txt"; /*読込ファイルの指定*/ 12$log0 = file( $file_name ); /*ファイルを全て配列に入れる*/ 13 14var_dump($log0); 15echo "<p>"; 16 17for($i = 0 ; $i < count($log0); $i++){ 18$log2[$i] = explode(",",$log0[$i]); 19} 20 21var_dump($log2); 22echo "<p>"; 23 24$log2[$hyouka][10]++; 25 26var_dump($log2); 27echo "<p>"; 28 29$str = ''; 30foreach($log2 as $card){ 31$str .= implode(',', $card); 32} 33 34var_dump($str); 35echo "<p>"; 36 37file_put_contents("log.txt",$str); 38 39 40}

とした時の出力結果が、以下になります。

string(2) "10"
array(5) { [0]=> array(11) { [0]=> string(1) "1" [1]=> string(2) "10" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(2) "60" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(3) "9 " } [1]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(2) "20" [4]=> string(1) "3" [5]=> string(2) "40" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(3) "9 " } [2]=> array(11) { [0]=> string(2) "10" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(2) "70" [9]=> string(1) "8" [10]=> string(3) "9 " } [3]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(2) "10" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(2) "50" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(3) "9 " } [4]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(2) "30" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(1) "9" } }

array(5) { [0]=> string(24) "10,1,1,2,3,4,5,6,70,8,9 " [1]=> string(24) "1,10,1,2,3,4,5,60,7,8,9 " [2]=> string(24) "1,1,10,2,3,4,50,6,7,8,9 " [3]=> string(24) "1,1,1,20,3,40,5,6,7,8,9 " [4]=> string(22) "1,1,1,2,30,4,5,6,7,8,9" }

array(5) { [0]=> array(11) { [0]=> string(2) "10" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(2) "70" [9]=> string(1) "8" [10]=> string(2) "9 " } [1]=> array(11) { [0]=> string(1) "1" [1]=> string(2) "10" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(2) "60" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(2) "9 " } [2]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(2) "10" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(2) "50" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(2) "9 " } [3]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(2) "20" [4]=> string(1) "3" [5]=> string(2) "40" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(2) "9 " } [4]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(2) "30" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(1) "9" } }

array(6) { [0]=> array(11) { [0]=> string(2) "10" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(2) "70" [9]=> string(1) "8" [10]=> string(2) "9 " } [1]=> array(11) { [0]=> string(1) "1" [1]=> string(2) "10" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(2) "60" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(2) "9 " } [2]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(2) "10" [3]=> string(1) "2" [4]=> string(1) "3" [5]=> string(1) "4" [6]=> string(2) "50" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(2) "9 " } [3]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(2) "20" [4]=> string(1) "3" [5]=> string(2) "40" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(2) "9 " } [4]=> array(11) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "2" [4]=> string(2) "30" [5]=> string(1) "4" [6]=> string(1) "5" [7]=> string(1) "6" [8]=> string(1) "7" [9]=> string(1) "8" [10]=> string(1) "9" } [10]=> array(1) { [10]=> int(1) } }

string(119) "10,1,1,2,3,4,5,6,70,8,9 1,10,1,2,3,4,5,60,7,8,9 1,1,10,2,3,4,50,6,7,8,9 1,1,1,20,3,40,5,6,7,8,9 1,1,1,2,30,4,5,6,7,8,91"

log.txtは、元は、
10,1,1,2,3,4,5,6,70,8,9
1,10,1,2,3,4,5,60,7,8,9
1,1,10,2,3,4,50,6,7,8,9
1,1,1,20,3,40,5,6,7,8,9
1,1,1,2,30,4,5,6,7,8,9

実行後は、
10,1,1,2,3,4,5,6,70,8,9
1,10,1,2,3,4,5,60,7,8,9
1,1,10,2,3,4,50,6,7,8,9
1,1,1,20,3,40,5,6,7,8,9
1,1,1,2,30,4,5,6,7,8,91

です。

やはりキャストが原因だったっぽくて、

php

1$log2[$hyouka][10] = (int)$log2[$hyouka][10]+1;

とすると、数値は増えました、もっと良い方法あったら教えて下さい

あと、数値は増えたんですが、この場合は別に改行コードを、このあとにつける必要があるようです、
そこで、

$log2[$hyouka][10] = (int)$log2[$hyouka][10]+1.PHP_EOL;
としたのですが、このような使い方はできずエラーになります、どのように改行コードをつければ良いのでしょうか。

takashimaさんの言うように、
$log2[$hyouka][10] = ((int)$log2[$hyouka][10]+1). PHP_EOL;
としたらできました・・・!

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

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

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

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

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

takasima20

2021/05/28 20:51

ちなみに、Windows っスか?
退会済みユーザー

退会済みユーザー

2021/05/29 00:34

win10です file_put_contents()は上書きなんですね、ではそちらを使いたいです。
takasima20

2021/05/29 02:10

fopen のモード指定を wb にするといいかも?
退会済みユーザー

退会済みユーザー

2021/05/29 03:20

なぜ?
退会済みユーザー

退会済みユーザー

2021/05/29 04:03

windowsはそうするんですね しかしfile_put_contents()使うならいいですよね。
takasima20

2021/05/29 11:59

ピリオドの前後に空白入れたら? あと、計算部分は括弧で囲むとか。
guest

回答1

0

ベストアンサー

出力内容的に見ると単純に$_POST['hyouka']が空だから、$log2[" "][10]++;を実行している、という風に見えます。
なので、まずは$_POST['hyouka']及び$hyoukaの値を確認してみてはいかがでしょうか。

投稿2021/05/28 15:43

yuuyu

総合スコア1139

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

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

退会済みユーザー

退会済みユーザー

2021/05/28 16:23

$hyoukaは0~10の整数値に、予想通りになっており、 log[$hyouka][10]も予想通りでした。 しかし、ログの値が++では変化がないため・・・ これ文字列として認識してるってことですかね? キャストする必要がある?
yuuyu

2021/05/29 02:16

前回からコードが書き換えられており、現在の出力を見る限りでは$hyoukaには値が入っているようにみられます。 それで$log2[$hyouka][10]++;を実行した後にプログラム内変数では正しくインクリメントされたのでしょうか? var_dump($log2);等を用いて確認してみてください。
退会済みユーザー

退会済みユーザー

2021/05/29 03:09

後で実際にやってみますが、 log.txtの中身を見る限りインクリメントされていませんね。。
yuuyu

2021/05/29 03:26

log.txtでの確認は、"インクリメントされている事"と"保存されている事"の両方ともをクリアしないと変化しないので、その情報だとどちらが原因でインクリメントされていないのかが判断できません。 後で実行するとのことなので、実行できたら進捗をお知らせください。
退会済みユーザー

退会済みユーザー

2021/05/29 04:33

file_put_contenを使う事にしました、 あと、更に詳しくvardumpを使って追記しました、 どこが原因でしょう。
yuuyu

2021/05/29 06:25

見たところインクリメント、書き込み、両方とも動いているように見えますが、 質問の出力を見る限り$_POST['hyouka']には"10"を入れていますよね。log.txtは先頭を0行目として4行目までしかないため、範囲外の値"$log2[10][10]"が作成されることは予想できると思いますが、その意図はなんでしょうか?
退会済みユーザー

退会済みユーザー

2021/05/29 09:03

数値を適当に設定していました。 4以下の数字なら正常にincrementされますかね
yuuyu

2021/05/29 10:12

その質問の答えはこちらではなく貴方が作成しているプログラムに聞いてください。 もし期待した回答を得られなかった場合に限りこちらに質問してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問