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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

2306閲覧

shuffle関数について

SayakaxxSakura

総合スコア19

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/10/04 17:31

PHP初心者です。
JQueryを使った簡単なスライドショーで一度に3枚ずつ表示するスライドショーを作成しました。
そこでアクセスする度に同じ画像だと面白くないので、
アクセスする度に画像を切り替えるように設定しようと思いました。

【menu.php】(クラス指定をするためのファイル)

PHP

1<?php 2 3class Menu { 4 protected $name; 5 protected $img; 6 7 public function __construct($name,$img) 8 { 9 $this -> name = $name; 10 $this -> img = $img; 11 } 12 13 public function getName() { 14 return $this -> name; 15 } 16 17 public function getImage() { 18 return $this -> img; 19 } 20 21 22} 23 24

【data.php】(連想配列を格納するためのファイル)

PHP

1$slide1 = new Menu('画像1','common/img/img01.png'); 2$slide2 = new Menu('画像2','common/img/img02.png'); 3$slide3 = new Menu('画像3','common/img/img03.png'); 4

【index.php】

PHP

1<?php 2 shuffle($menus); 3?> 4 <?php foreach($menus as $menu) :?> 5 <div class="swiper-slide scale"> 6 <a title=" <?php echo $menu -> getName() ?>" href="#"> 7 <img src="<?php echo $menu -> getImage() ?>" alt=""> 8 </a> 9 </div> 10 <?php endforeach ?>

まず1番最初に試したのが上記です。
とりあえずshuffle関数を使ってみたという感じです。
次に

PHP

1$menus = array($slide1,$slide2,$slide3); 2$menusKey = array_keys($menus); //キー取り出し 3shuffle($menusKey);//キーを並び替え 4$newMenus = array();//結果を入れる配列 5foreach($menusKey as $key) { //配列並び替え 6 $newMenus[$key] = $menus[$key]; 7 echo $newMenus; //結果Array 8 echo '<br/>'; 9}

と上記のようにキーを取り出し、shuffle関数でキーを並び替えをし、空の配列を用意し、foreach文で配列を並び替えるという処理をしてみましたが、結果はArrayでした。

考えれば考えるほど、ドツボにハマり質問させていただきました。
なんとかスライドショーをシャッフルで表示させる方法はないでしょうか?
よろしくお願いいたします。

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

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

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

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

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

kei344

2017/10/04 17:36

「1番最初に試した」ものでもできなかった、エラーが出た、ということでしょうか。
SayakaxxSakura

2017/10/04 17:38

少し訂正します。エラーがでたと言うよりは何も変わらなかった。というのが正しいです。
guest

回答1

0

ベストアンサー

んーと、PHPの場合、配列をechoすると、"Array"っていうstringが表示されるだけです。なので、

PHP

1print_r($newMenus);

で、配列の中身が確認できます。

で、PHPの場合の特殊仕様として、配列の代入は参照渡しではなくcopyになるのです。
そして、shuffle()メソッドは単純に配列要素をシャッフルできるので、

PHP

1$newMenus = $menus; // ← copy 2 3shuffle($newMenus);

するだけで良いのです。キーがどうしたとか、余計なこと考えなくて大丈夫です。

あとは、foreachで1つづつ要素を確認したい時は

PHP

1foreach($newMenus as $val) 2{ 3 echo $val->getName() . "<br>"; 4}

こんなんでいいです。(要素がオブジェクトな事忘れてたのでちょっと修正しました。さらに、マジックメソッドじゃなくてゲッタ・セッタだった事も忘れてたので修正しました。)

@kei344 2017/10/05 02:36
「1番最初に試した」ものでもできなかった、エラーが出た、ということでしょうか。

これ、何が聞きたかったのかな? 質問文、特に編集してある様子もないし、聞いたらなんか回答が変わる可能性があんのかな? どこにも「エラーが出た」とか書いてないみたいだし、よくわかんねぇなぁ…

投稿2017/10/05 00:27

編集2017/10/05 00:42
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kei344

2017/10/05 00:39

To: luckerさん 【index.php】でluckerさんが回答されている使い方をされているので、なぜ「キーを並び替え」をする必要があるのかわからないので、確認してみました。エラーについては出ていることを記載されない質問者が結構いるためです。
退会済みユーザー

退会済みユーザー

2017/10/05 00:41

> と上記のようにキーを取り出し、shuffle関数でキーを並び替えをし、空の配列を用意し、foreach文で配列を並び替えるという処理をしてみましたが、結果はArrayでした。 って、嵌まってる所ズバリ書いてあるのに?
kei344

2017/10/05 00:43

To: luckerさん 最初の方法で不都合があるから別の方法を試したのでは、と推測しました。質問者も「何も変わらなかった」と回答しています。
m.ts10806

2017/10/05 00:54

回答やそのコメントででわざわざ書くのではなく、「質問への追記・修正、ベストアンサー選択の依頼」の方でするやり取りと思いますが。
SayakaxxSakura

2017/10/05 03:54

返信おそくなってしまい申し訳ございません。 非常にわかりやすい説明ありがとうございます。 初心者なばかりに曖昧な質問をしてしまい申し訳ございません。
MasahikoHirata

2017/10/15 15:46

これでマイナス評価?やっかみが多いサイトですね。ってかこれ書くと、俺も多くのマイナス。なんだかなぁ。
MasahikoHirata

2017/10/15 15:48

luckerさんより的確な回答を先にすれば良いのに。”思考過程”が重要と言う点を完全に無視した評価。まあ回答が気に入らなければ(自分の考えと違う)程度で”相手の意図を理解しない?”(要求仕様も作れない)程度の評価ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問