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

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

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

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

Q&A

解決済

4回答

182閲覧

ランダムに3回違った文字を表示

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2019/06/18 09:29

編集2019/06/18 09:33

yahoo知恵袋をみて、少しきになってコードを実現させようとしましたが
うまくいかないので、質問してみました。

$a = "a";
$b = "b";
$c = "c";
を、ランダムに3回表示させたいです。重複はダメです。

そこで、以下のように組んでみましたが、うまくいきません。

php

1<?php 2$a = "a"; 3$b = "b"; 4$c = "c"; 5 6$array = array(); 7 8$i = 0; 9while($i<3){ 10 $rand = rand(0,2); 11 12 if($rand == 0 && !array_search($a, $array)){ 13 array_push($array, $a); 14 echo $a; 15 }elseif($rand == 1 && !array_search($b, $array)){ 16 array_push($array, $b); 17 echo $b; 18 }elseif($rand == 2 && !array_search($c, $array)){ 19 array_push($array, $c); 20 echo $c; 21 }else{ 22 $i--; 23 } 24 25 $i++; 26} 27 28 29echo "<pre>"; 30print_r($array); 31echo "</pre>"; 32 33 34 35

どこのロジックが間違っているでしょうか。

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

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

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

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

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

guest

回答4

0

array_search

array_searchを使うのではなく、in_arrayを使ってみてはどうでしょうか。

例:↓↓
if($rand == 0 && !in_array($a, $array, true))

投稿2019/06/18 09:55

tail12

総合スコア607

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

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

退会済みユーザー

退会済みユーザー

2019/06/19 01:10

in_arrayでできました! ありがとうございます。
guest

0

array_search

needle が見つかった場合に配列のキー、 それ以外の場合に FALSE を返します。

これ、ちょっと厄介で、配列の最初の値と同じものを引くと0が返ります。
配列の中に値が存在するのにvar_export(!0);trueになり、意図した動作をしません。
*配列の一番戦闘に入った値は重複を許してしまいます。

記述にあるコードの意図を最大限尊重すると、array_searchとなっている箇所でin_arrayを使用すると良いです。

追記
!array_search($x, $array)===falseってのもありですね。

投稿2019/06/18 09:48

編集2019/06/18 10:02
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/06/19 01:10

なるほど! array_searchにはそんな落とし穴があったとは.... in_array()でできました! ありがとうございます!!!!
guest

0

shuffleしてはだめなのでしょうか?

PHP

1$a = "a"; 2$b = "b"; 3$c = "c"; 4$array = array($a,$b,$c); 5shuffle($array); 6print_r($array);

投稿2019/06/18 09:37

yambejp

総合スコア114747

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

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

退会済みユーザー

退会済みユーザー

2019/06/18 09:39

suffleという組み込み関数があったのですね。 今知りました。ありがとうございます。
guest

0

ベストアンサー

どこのロジックが間違っているでしょうか。

重複はダメです、の意味が同じ文字が複数回出現してはだめの意味なら、そのロジックがないからです。間違っているのではなく、かけらもないのです。

私なら6パターンしかないので、6個の配列を持ってランダムで6個のうちの一つを返すロジックにします

投稿2019/06/18 09:34

papinianus

総合スコア12705

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

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

papinianus

2019/06/18 09:35

もっと要素が多いならfisher-yatesでシャッフルします
退会済みユーザー

退会済みユーザー

2019/06/18 09:36

先ほど気がつきました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問