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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

883閲覧

PHPを使った10桁のビット列の1のみを中央寄せにする

banbook18

総合スコア13

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2016/10/19 08:44

編集2016/10/19 08:57

PHPで繰り返しを用いて配列を表示していくプログラムを書いています。
以下プログラムです。

<?php $ar = array(); for($i = 0; $i < 10 ; $i++){ $num = mt_rand(0,1); $ar = $num; } foreach($ar as $value){ echo $value; } switch ( array_sum($ar) ){ case 1: $ar[5] = 1; $ar[0] = $ar[1] = $ar[2] = $ar[3] = $ar[4] = $ar[6] = $ar[7] = $ar[8] = $ar[9] = 0; break; case 2: $ar[5] = $ar[4] = 1; $ar[0] = $ar[1] = $ar[2] = $ar[3] = $ar[6] = $ar[7] = $ar[8] = $ar[9] = 0; break; case 3: $ar[3] = $ar[4] = $ar[5] = 1; $ar[0] = $ar[1] = $ar[2] = $ar[6] = $ar[7] = $ar[8] = $ar[9] = 0; break; case 4: $ar[5] = $ar[3] = $ar[4] = $ar[6] = 1; $ar[0] = $ar[1] = $ar[2] = $ar[7] = $ar[8] = $ar[9] = 0; break; case 5: $ar[5] = $ar[2] = $ar[3] = $ar[4] = $ar[6] = 1; $ar[0] = $ar[1] = $ar[7] = $ar[8] = $ar[9] = 0; break; case 6: $ar[5] = $ar[2] = $ar[3] = $ar[4] = $ar[6] = $ar[7] = 1; $ar[0] = $ar[1] = $ar[8] = $ar[9] = 0; break; case 7: $ar[5] = $ar[1] = $ar[2] = $ar[3] = $ar[4] = $ar[6] = $ar[7] = 1; $ar[0] = $ar[8] = $ar[9] = 0; break; case 8: $ar[0] = $ar[9] = 1; $ar[0] = $ar[1] = $ar[2] = $ar[3] = $ar[4] = $ar[6] = $ar[7] = $ar[8] = 0; break; default: } foreach($ar as $value){ echo $value; }

正直どこがまちがっているのかわかりません。
目標としては、最初のforeach文で、0,1の乱数が代入された配列の全ての要素を表示し、次のforeach文でswitch文で判定し並び替えた配列を表示したいです。
switch文の中は中央寄せを指定しする並び替えです。奇数の時は仕方なく片方に寄せています。

お願いします。

追記:switch文の中身をもっときれいにする方法はありますでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

まず、$ar = $num;
ではなく
$ar[] = $num;
では?

投稿2016/10/19 08:50

hiim

総合スコア1689

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

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

banbook18

2016/10/19 08:56

ありがとうございます! 変更したらできるようになりました!! ですが、たまに、配列の合計値が8の時に1がいちばん右に表示されたりします。これはどうしたらよいでしょうか?
banbook18

2016/10/19 09:00

すみません、先ほどの8の件は解決しました。 ありがとうございます。
hiim

2016/10/19 09:26

> 追記:switch文の中身をもっときれいにする方法はありますでしょうか? 目的がわからないのでこんな方法で良いのかどうかはわかりませんが、 asort($ar); $count = array_count_values($ar); for($i=0;$i<$count[0]/2;$i++) { array_shift($ar); $ar[] = 0; } とか
hiim

2016/10/19 09:49

$sum = array_sum($ar); $ar = array_fill(0,10,0); for($i=0;$i<$sum;$i++) { $idx = 0; if($i%2) $idx = 5 - ceil($i/2); else $idx = 5 + floor($i/2); $ar[$idx] = 1; } の方が近いかもしれませんね。
banbook18

2016/10/19 23:53

ありがとうございます1 本日また復習するので、実行してみたいと思います!
guest

0

$valueの中が変わっていないからではないでしょうか?

追記:失礼しました。読み間違いです。
$arの中でした。。。

投稿2016/10/19 08:48

編集2016/10/19 08:52
s.t.

総合スコア2021

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

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

banbook18

2016/10/19 09:01

回答ありがとうございます! $arが違ったようです・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問