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

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

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

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

Q&A

解決済

1回答

568閲覧

PHP 配列 特定の値 追加

Z-TALBO

総合スコア525

PHP

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

0グッド

0クリップ

投稿2017/04/25 00:21

###やりたいこと
複数行のデータを取り扱うとき、最大行数(今回は10行)に達していない場合、最大行数になるようにする処理

###テストデータ

PHP

1$TestDate = []; 2$TestDate[] = ['20140425230', 'A', '09:00']; 3$TestDate[] = ['20140425231', 'B', '10:00']; 4$TestDate[] = ['20140425233', 'C', '12:00']; 5$TestDate[] = ['20140425235', 'D', '14:00'];

###今回のテストで最終的にしたいデータ

PHP

1$TestDate[] = ['20140425230', 'A', '09:00']; 2$TestDate[] = ['20140425231', 'B', '10:00']; 3$TestDate[] = ['20140425232', '', '']; 4$TestDate[] = ['20140425233', 'C', '12:00']; 5$TestDate[] = ['20140425234', '', '']; 6$TestDate[] = ['20140425235', 'D', '14:00']; 7$TestDate[] = ['20140425236', '', '']; 8$TestDate[] = ['20140425237', '', '']; 9$TestDate[] = ['20140425238', '', '']; 10$TestDate[] = ['20140425239', '', ''];

###一応やってはみたこと
考えが足りないのですが、、、、
1.最大が10行なら、現在の行数を数えて残りを追加
これだと結局2014042523[0~9]のどれなのかわからない
※重複はNGです。

2.for文で回してみる?

PHP

1// 変わらない共通部分 2$dateNum = '2014042523'; 3 4// 最大10行ならfor文で回してみたらどうなんだろうか? 5for($i = 0; $i < 10; $i++) { 6 // 2014~~の部分が[0~9]あるのかどうか 7 $id = in_array($Ymd.$car.$i, $TestDate[$i]); 8 // 無い場合は$dateNum.$iで[2014042523[0~9]]を作ってみる 9 if(!$id) { 10 $TestDate[] = [$dateNum.$i, '', '']; 11 } else { 12 13 } 14}

###やってみたことの②の結果

PHP

1array(12) { 2 [0]=> 3 array(3) { 4 [0]=> 5 string(11) "20140425230" 6 [1]=> 7 string(1) "A" 8 [2]=> 9 string(5) "09:00" 10 } 11 [1]=> 12 array(3) { 13 [0]=> 14 string(11) "20140425231" 15 [1]=> 16 string(1) "B" 17 [2]=> 18 string(5) "10:00" 19 } 20 [2]=> 21 array(3) { 22 [0]=> 23 string(11) "20140425233" 24 [1]=> 25 string(1) "C" 26 [2]=> 27 string(5) "12:00" 28 } 29 [3]=> 30 array(3) { 31 [0]=> 32 string(11) "20140425235" 33 [1]=> 34 string(1) "D" 35 [2]=> 36 string(5) "14:00" 37 } 38 [4]=> 39 array(3) { 40 [0]=> 41 string(11) "20140425232" 42 [1]=> 43 string(0) "" 44 [2]=> 45 string(0) "" 46 } 47 [5]=> 48 array(3) { 49 [0]=> 50 string(11) "20140425233" 51 [1]=> 52 string(0) "" 53 [2]=> 54 string(0) "" 55 } 56 [6]=> 57 array(3) { 58 [0]=> 59 string(11) "20140425234" 60 [1]=> 61 string(0) "" 62 [2]=> 63 string(0) "" 64 } 65 [7]=> 66 array(3) { 67 [0]=> 68 string(11) "20140425235" 69 [1]=> 70 string(0) "" 71 [2]=> 72 string(0) "" 73 } 74 [8]=> 75 array(3) { 76 [0]=> 77 string(11) "20140425236" 78 [1]=> 79 string(0) "" 80 [2]=> 81 string(0) "" 82 } 83 [9]=> 84 array(3) { 85 [0]=> 86 string(11) "20140425237" 87 [1]=> 88 string(0) "" 89 [2]=> 90 string(0) "" 91 } 92 [10]=> 93 array(3) { 94 [0]=> 95 string(11) "20140425238" 96 [1]=> 97 string(0) "" 98 [2]=> 99 string(0) "" 100 } 101 [11]=> 102 array(3) { 103 [0]=> 104 string(11) "20140425239" 105 [1]=> 106 string(0) "" 107 [2]=> 108 string(0) "" 109 } 110}

###問題点
無い頭でやってあと一歩なのかな、、、とか思うところまではやったのですが、、、
当然の話今回のケースだと、20140425233と20140425235の部分は重複してしまいました。
理由的な部分はそもそもテストデータを上から確認しているときに、20140425232が存在していない時点でそこから下がfalseになっているからとは思っているんですが、、、

ここから、又はそもそもの考え方が違うのかとは思いますが、どのような形にすると良いでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

ロジックとしては良いと思います。
配列から値が探し切れていないのだと思います。
in_arrayのところを修正してみました。

PHP

1// 最大10行ならfor文で回してみたらどうなんだろうか? 2for($i = 0; $i < 10; $i++) { 3 // 2014~~の部分が[0~9]あるのかどうか 4 $key = array_search($dateNum.$i, array_column($TestDate, 0)); 5 // 無い場合は$dateNum.$iで[2014042523[0~9]]を作ってみる 6 if($key === FALSE) { 7 $TestDate[] = [$dateNum.$i, '', '']; 8 } 9}

投稿2017/04/25 00:43

ttyp03

総合スコア16998

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

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

Z-TALBO

2017/04/25 01:59

回答ありがとうございます! 思ったようにデータができました。 配列から値が探しきれてないのは思っていましたが、どうも、そこを解決する術に辿り着けませんでしたが、一つ勉強になりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問