それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

配列インデックスの連番に欠番が出たときに、欠番をnullで埋める。

php の配列はすべてが連想配列なので、連番に欠番が出る。

欠番を「除去」したいときは、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);

もっといい方法がないのだろうか。