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

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

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

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

Q&A

解決済

4回答

1131閲覧

PHP foreachに関して

Lgopo

総合スコア1

PHP

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

0グッド

1クリップ

投稿2021/08/05 08:22

編集2021/08/05 08:28

前提・実現したいこと

$a = [5,3,1,4,2];

配列の変数をソート関数以外で取り出して番号順(1,2,3,4,5)で表示させたいと考えております。

foreachを使って取り出そうとしていますが、
ループ処理の部分がどう書いていいのかわかりません。

プログラム初心者ため教えていただくと幸いです。
どうぞよろしくお願いいたします。

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

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

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

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

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

maisumakun

2021/08/05 08:24

6はどこから発生するのですか?
Lgopo

2021/08/05 08:26

maisumakun様 6は間違いです。 1〜5までとなります。 失礼いたしました。
maisumakun

2021/08/05 08:28

なぜ「ソート関数以外」でなければならないのでしょうか? (他に禁止されていることはありますか?)
Lgopo

2021/08/05 08:32

maisumakun様 なぜ「ソート関数以外」でなければならないのでしょうか? →こちらですが、基礎の部分を身に着けるためにとどのようにソートの処理を書いていくか理解しようとしております。 その他禁止事項はございませんが、できるかぎり比較演算子を利用して取り出したいと考えております。 つたない文章で申し訳ございません。
guest

回答4

0

ベストアンサー

質問の意図が難しくて答えにくいのですが、ソートのアルゴリズムの記事を参考にすればどうでしょう。

参考
https://kojikoji75.hatenablog.com/entry/2013/09/21/115937

ちょっと記事が古いですが、似たような記事は簡単に見つかるはずです。初心者ということですが、とにかく今は知らないことをガンガン調べまくることが大事かと思います。いちいち質問サイトで聞いていては学習効率は上がりませんし、自分で目的のドキュメントを見つけられるスキルを上げることも大事です。あとは本屋さんに行って自分に合いそうな参考書を1冊買うのもいいかもしれません。

頑張ってください。

投稿2021/08/05 08:56

編集2021/08/05 08:57
AbeTakashi

総合スコア4853

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

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

Lgopo

2021/08/05 08:59

AbeTakashi様 仰るとおりです。 ありがとうございます。
guest

0

foreachを使って取り出そうとしていますが

ソートを行う際は、(やり方によってはそうでないこともありますが)同じ配列の複数の要素を比較・交換していく繰り返しとなりますので、1つの値を取り出すforeachは向きません。

投稿2021/08/05 08:35

maisumakun

総合スコア146018

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

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

Lgopo

2021/08/05 08:39

ありがとうございます。 勉強になります。 ではfor文を利用して取り出す方法が最善かと思いました。
maisumakun

2021/08/05 08:40

特に、「foreachで回しながら配列の中身を入れ替える」ような動作は、「そんなことをしてもforeachがきちんと動くか保証されていることを確認する」必要が生じますので、やらないほうがいいです。
Lgopo

2021/08/05 08:46 編集

わかりやすいご説明ありがとうございます。 maisumakun様だとどのように処理していきますでしょうか?
maisumakun

2021/08/05 08:48

自分でソートを書かなければならない理由がないなら、躊躇なく標準関数を使うだけです。 自分で書けば余計なバグを作り込むリスクもあります。
guest

0

比較しないのがお手軽そうなので、適当に書いてみました。

php

1<?php 2$a = [5,3,1,4,2]; 3// $a = [5,3,10,4,20]; 4// $a = [5,3,10,4,10]; 5$max = max($a); 6$b = array_flip($a); 7for($i = 0; $i <= $max; $i++){ 8 echo isset($b[$i])?$i:"skip"; 9 echo PHP_EOL; 10}
skip 1 2 3 4 5

バケットソートと呼ばれるもののようです。

投稿2021/08/05 10:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

では、バブルソートモドキで

php

1<?php 2$a = [5,3,1,4,2]; 3$n = count($a); 4$sorted = []; 5for ($i=0; $i<$n; $i++) { 6 $x = min($a); 7 unset($a[array_search($x,$a)]); 8 $sorted[] = $x; 9} 10print_r($sorted) 11?>

投稿2021/08/05 12:08

takasima20

総合スコア7464

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問