MinEMemO

【PHP】データの連番確認と、抜け番またはMAX+1を生成する関数

📝 更新日:2020-06-04 / 📄 作成日:2020-06-04
Hero Image
目次

はじめに

データベースから持ってきた数字のデータをチェックし、「抜け番」または「MAX+1」を生成する関数を作成しました。

作成環境のPHPが5.3系だったので、コードは5.3系で動くものになっています。
何か不整合があれば教えてください。

またご利用の際は、ご自身でしっかりチェックを行い、自己責任でご利用をお願いいたします。

コード

PHP
/*
* サンプルデータ
* DBなどから取得したりする流れになると思いますが、処理中に最後の番号を参照するので、昇順できちんとソートしましょう。
*/
$numData = array(1,2,4,5); 

/**
* 新規番号を抜け番 or MAX+1で発行する
* @param {array} $numData DBや何かしら持ってきたNoのデータ配列
* @return {number} 抜け番 or MAX+1
*/
function issueNo($numData){
 $maxIdx = count($numData)-1;
 $range = range(1,$numData[$maxIdx]); //1~データの最後のNoで連番の配列を作成
 foreach($range as $idx => $rangeNo){
  if($rangeNo !== $numData[$idx]) return $rangeNo; //抜け番を返して終了
 }
 //MAX+1を返して終了
 return $numData[$maxIdx] + 1;
}

処理結果

抜け番があるデータを処理した場合

例えば array(1,2,4,5);
をこの関数に渡し処理した場合は抜け番の「3」がリターンされます。

抜け番がないデータを処理した場合

例えば array(1,2,3,4,5);
のようなデータを処理するとMAX+1の「6」がリターンされます。

解説

ポイントはrangeです。

PHP
 $range = range(1,$numData[$maxIdx]); 

rangeで今回作成される配列は1~取得データのMAX値の連番の配列になります。

rangeで作成した連番の配列と取得したデータの数字の配列を比較することで、連番かどうかを確認しています。

以上です。

慣れないうちは頭で処理を想像するのが大変かもしれませんが、作っていれば慣れていくので大丈夫です
profile_icon
taka
プログラマー
いつでも転職希望の業務経験7年目(2023時点)のエンジニアです。 仕事の合間にすこしずつ転職活動はしていますが、条件が合う場合ぜひTwitterなどでご連絡頂けると嬉しいです。 希望条件は基本的に残業は1日x1h程度。収入は一旦現状維持。 ある程度で構わないので、保守運用が管理されていて、精神的に安心して働ける環境が良いです。 経験言語はHTML、CSS、javascript、PHP、MySQL、Docker、Vuejs、Laravel このブログは完全に自作で静的ジェネレータで作りました。 この範囲で言えば React.js Gatsby.js GraphQLも経験があります。 最近はAIがどう社会に受け入れられ、日常になっていくのかの行く末が気になっています。 今までの人生で一番変化を感じて不思議な感覚です。