PHPのforeachで順番を変える方法を現役エンジニアが解説【初心者向け】

初心者向けにPHPのforeachで順番を変える方法について解説しています。foreachは、配列を順番に処理するための構文で、繰り返し文(ループ)の一種です。サンプルでは標準関数を使わずにforeachなど繰り返し文を使って配列をソートしています。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

今回は、PHPのforeachで順番を変える方法について解説します。

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPのforeachで順番を変える方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

foreachの基礎

PHPにおけるforeachとは、配列を順番に処理するための構文です。配列の中の値を一つ一つ取り出して、それぞれの値を処理していく場合などに有用です。

例えば、配列の中に入っている文字列を順番に出力していくなど。foreachが取る値は、配列またはオブジェクトになります。

書き方は、

foreach (配列 as 値) { }

となります。「配列」に入っている値を順番に取り出し、その中(中括弧の中身)では、「値」として展開します。また、連想配列を取る場合は、キーと値をそれぞれ下記のように展開できます。

foreach (配列 as キー => 値) { }

中括弧の中で値が展開され、処理が行われると、繰り返しで次の値が展開されます。配列の最後までいくと foreach が終了し、次の処理となります。

ソートとは?

ソートとは、複数の値を特定の条件で並び替えることです。主に、小さい順(昇順)と大きい順(降順)があります。

配列の処理で順序処理を行う上で、特定の順番に処理したい場合があり、その前に配列を並び替える必要があります。

ソートには様々な方法(アルゴリズム)がありますし、PHPはソート関数(sort(), rsort(), asort(), arsort()など)も用意されています。一般的には、そちらを使います。

ただ、ソートアルゴリズムを考えることは、プログラムのロジックを考える上で有用なので、ここではあえて、foreachを使ってソートを実装してみます。

foreachを使って配列を昇順に並び替える場合に、単純に並び替えたい配列の最小値から順に新しい配列に入れていくような実装をしてみます。

$ary = [5, 3, 4, 2, 1];
$sorted_ary = [];
$count = 0;
while($count < count($ary)) {
 $tmp = null;
 foreach ( $ary as $key => $val ) {
   if (in_array($val, $sorted_ary)) continue;
   if ($tmp === null) {
     $tmp = $val;
   } else {
     $tmp = min($tmp, $val);
   }
 }
 $sorted_ary[] = $tmp;
 $count++;
}

ここでは、最初の配列$aryの最小値から順に新しい配列$sorted_aryに入れています。もちろん、もっと効率的なソートアルゴリズムはありますので、ぜひ調べてみてください。

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

それでは、実際にforeachで実装したソートを実行してみます。下記のようにコードを書いてみます。

<?php
$ary = [5, 3, 4, 2, 1];
$sorted_ary = [];
$count = 0;
while($count < count($ary)) {
 $tmp = null;
 foreach ( $ary as $key => $val ) {
   if (in_array($val, $sorted_ary)) continue;
   if ($tmp === null) {
     $tmp = $val;
   } else {
     $tmp = min($tmp, $val);
   }
 }
 $sorted_ary[] = $tmp;
 $count++;
}
var_dump($ary);
var_dump($sorted_ary);
?>

ここで、var_dumpは配列の中身を表示する関数です。こちらの実行結果は下記になります。

array(5) {
 [0]=>
 int(5)
 [1]=>
 int(3)
 [2]=>
 int(4)
 [3]=>
 int(2)
 [4]=>
 int(1)
}
array(5) {
 [0]=>
 int(1)
 [1]=>
 int(2)
 [2]=>
 int(3)
 [3]=>
 int(4)
 [4]=>
 int(5)
}

実行結果から、配列の中身が昇順に並び替えて新しい配列になっているのが確認できます。

筆者プロフィール

メンターYさん

フリーランスエンジニアとして、PHPを中心としたWEB開発全般を行う。最近では、WordPressを使ったメディアの構築・運用を多くこなしている。

元々は大手通信会社のエンジニアで、セキュリティに関する仕事をするも、大企業が肌に合わず独立。一箇所に縛られての仕事を苦手とし、自宅とカフェとコワーキングスペースを行ったり来たりしている。

ただ、自宅にいるとどうしてもゲームをしてしまうため、コワーキングスペースの比率が大きい。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間でPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。