欠番を「除去」したいときは、array_values で欠番を除いて再度の採番をすればいいのだけど、「欠番」を「特定の値で埋めたい」ときにはどうすればいいか。
欠番を数字で埋める。
<?php $a = [ 1=>'a', 3=>'c', 4=>'d', ]; $seq_keys = range(min(array_keys($a)),max(array_keys($a)) ); $b = array_replace(array_fill_keys($seq_keys,'未設定'),$a); var_dump($a,$b,$c);
実行結果
array(3) { [1]=> string(1) "a" [3]=> string(1) "c" [4]=> string(1) "d" } array(4) { [1]=> string(1) "a" [2]=> string(9) "未設定" [3]=> string(1) "c" [4]=> string(1) "d" }
array_map を使うともっと記述がシンプルかも
<?php $c = array_map(fn($idx)=>$a[$idx]??'未設定',$seq_keys);
もっといい方法がないのだろうか。