配列のsortと連番確認

2022/09/29に公開

この記事でわかること

  1. 配列を昇順に並べる
  2. 配列で連番になっている数をグループ化する

1. 配列を昇順に並べる

😄 {あの〜。配列の数字がぐちゃぐちゃすぎて、何の数字があるか分かりにくいです)
{規則性を持たせて確認しやすいようにしたいです!)
👮‍ {なるほど! そんな時はsort関数を使うといいですよ!)
{今回の場合だと数字を確認しやすくするだけなので、昇順でよさそうですね!)

$array = array(1,5,19,20,21,4);

配列の数字を昇順に整理したい時ってないですか?
そのまま出力すると

echo implode(",", $array);
//出力すると・・・
1,5,19,20,21,4
}

こんな感じになっちゃって分かりにくい。。。

そんな時はsort関数を使ってみましょう!
sort($array, SORT_ASC );
これで配列の中身を見てみると〜?

sort($array,SORT_ASC);
echo implode(",", $array);
//出力
1,4,5,19,20,21

😄 {おおー。わかりやすくなりました!)
😄 {後は、数字が連番かどうかを調べたいです!!)
👮‍♂️ {分かりました!)
{でしたら、配列の要素を一つずつチェックする方法を伝授します!!)
{その場合も配列の順序は昇順など規則性を持たせておくのがいいですね)


2. 連番のグループを作る

$i = 0;
$pre = null;
//差分が1ならグループにまとめる。そうでなければ孤立させる
foreach($array as $number){
    if(!is_null($before) && ($number - $before) == 1){
        ${"box".$i}[]=$number;
    }elseif (is_null($before)) {
        ${"box".$i}[]=$number;
    }elseif(($number - $before) != 1){
        $i++;
        ${"box".$i}[]=$number;
    }
        $before = $number;
    }

連番のグループ毎を出力させる

//配列の中で、連番のものを配列化させる!!
for($x=0;$x<=$i;$x++){
    echo var_dump(${"box".$x});
}
//出力
//連番ごとに配列があるのがわかる。
//また、$xの数だけ連番のグループが存在する。
array(1) {
  [0]=>
  string(1) "1"
}
array(2) {
  [0]=>
  string(1) "4"
  [1]=>
  string(1) "5"
 }
array(3) {
  [0]=>
  string(2) "19"
  [1]=>
  string(2) "20"
  [2]=>
  string(2) "21"
}

😄 {おお!!なるほど!!配列を一度昇順でソートすることで)
{連続する値かどうかの判定もしやすくなるんですね)
{これで、ぐちゃぐちゃだった配列の整理もしやすくなりました。ありがとうございます!!!)

Discussion