🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

解決済

1回答

727閲覧

PHPの配列から順番に出力したい。

satoshi5555

総合スコア18

PHP

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

0グッド

1クリップ

投稿2019/12/08 07:10

編集2019/12/09 03:57

このような配列をstartからendまで回して

$a = array(0 => '中村' 1800 => '佐藤', 1830 => '田中',1850=>'伊藤',2000=>'山田'); $start = 1780; $end = 2019;

↓の様に実行結果を表示させるという問題に詰まっています。

実行結果 1780番 中村1781個 1781番 中村1782個 ↓(略) 1798番 中村1799個 1799番 中村1800個 1800番 佐藤1個 1801番 佐藤2個 ↓(略) 1828番 佐藤29個 1829番 佐藤30個 1830番 田中1個 1831番 田中2個 ↓(略) 1848番 田中19個 1849番 田中20個 1850番 伊藤1個 1851番 伊藤2個 ↓(略) 1998番 伊藤149個 1999番 伊藤150個 2000番 山田1個 2001番 山田2個 ↓(略) 2017番 山田18個 2018番 山田19個

最初に書いたコードが↓ですが、

PHP

1<?php 2$gannen_nengou = array( 3 0 => "中村" 4 , 1800 => "佐藤" 5 , 1830 => "田中" 6 , 1850 => "伊藤" 7 , 2000 => "山田" 8 ); 9$start = 1780; 10$end = 2019; 11 12$nakamura = array(); 13$sato = array(); 14$tanaka = array(); 15$ito = array(); 16$yamada = array(); 17 18 19 for($i=$start; $i <=$end; $i++){ 20 if($i < 1800){ 21 $nakamura[] = $i.'番   '.$gannen_nengou[0].($i + 1).'個</br>'; 22 }else if(1800 <= $i && $i < 1830){ 23 $sato[] = $i.'番   '.$gannen_nengou[1800].($i - 1799).'個</br>'; 24 }else if(1830 <= $i && $i < 1850){ 25 $tanaka[] = $i.'番   '.$gannen_nengou[1830].($i - 1829).'個</br>'; 26 }else if(1850 <= $i && $i < 2000){ 27 $ito[] = $i.'番   '.$gannen_nengou[1850].($i - 1849).'個</br>'; 28 }else if(2000 <= $i && $i <= $end){ 29 $yamada[] = $i.'番   '.$gannen_nengou[2000].($i - 1999).'個</br>'; 30 } 31 } 32 33$names = array($nakamura,$sato,$tanaka,$ito,$yamada); 34foreach ($names as $name) { 35 foreach ($name as $name_name) { 36 print $name_name.'</br>'; 37 } 38} 39?>

この様な書き方だと配列に新たなキーと値(キー:2010,値:石川)を追加した時に、for文の中も書き換えなければいけなく効率が悪い為、新たなキーと値を入れるだけで

2000番 山田1個 2001番 山田2個 ↓(略) 2009番 山田10個 2010番 石川1個 2011番 石川2個 ↓(略) ※修正 2019番 石川10個

の様に出力されるように、考えています。

~~しかし上手く出来ず、最初のキーが0な事が引っ掛かりそこを考えてコードを書くとその後がおかしくなったりと、頭の中で整理ができなくなっています。最初のキーと値は別として考えるのかな、とも思っているのですが・・・。
~~

どうコードを書けばいいか教えて頂けると助かります。
よろしくお願いしたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/12/08 07:34

個数の定義が不明です
XNXSXMXR

2019/12/08 07:44 編集

> しかし上手く出来ず 実行結果を追記していただくと、ヒントが集まるかもしれません。 あと、伊藤1個とか山田10個とか、●個という数はどこからきたものでしょうか?
m.ts10806

2019/12/08 10:32

他者なので質問者さんが考えてることは全く知りません。 仕様、要件は具体的に記載してください。
guest

回答1

0

ベストアンサー

2010番 石川1個 ・・・ ↓(略) ・・・ 2019番 石川20個

なんで間が9番で19個増えてるのか謎仕様ですが……

PHP

1<?php 2$a = array(0 => '中村', 1800 => '佐藤', 1830 => '田中', 1850 => '伊藤', 2000 => '山田'); 3$b = array_keys($a); 4 5$start = 1780; 6$end = 2019; 7 8$min = min(min($b), $start); 9$max = max(max($b), $end); 10$cnt = count($b); 11$cursor = 0; 12$num = 0; 13 14for ($i = $min; $i <= $max; $i++) { 15 $num++; 16 if (!isset($name)) { 17 $name = $a[$b[0]]; 18 } 19 if ($cnt - 1 > $cursor && $b[$cursor + 1] === $i) { 20 $name = $a[$b[$cursor + 1]]; 21 $num = 1; 22 $cursor++; 23 } 24 if ($start <= $i && $i <= $end) { 25 printf("%d番 %s%d個\n", $i, $name, $num); 26 } 27}

投稿2019/12/08 07:47

編集2019/12/08 07:48
takepan1973

総合スコア821

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

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

satoshi5555

2019/12/13 05:47

申し訳ございません、9番で10個でした。 ありがとうございました!!とても助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問