[PHP] 配列(Array)操作Notice: Undefined offset

2 min read
hiroweb developer

ある配列をループで回してたらこんなエラーがでました。

Notice:  Undefined offset: 1 in hoge.php on line 269

指定された添え字がおかしいって事なんだろうけど、1 で引っかかるのは明らかにおかしい…。

原因はarray_unique()

とにかく、配列をprint_r()してみることに。
Array(
  [0]  => 0010522
  [29] => 0020173
  [30] => 0020181
  [31] => 0020231
  [32] => 0020242
  [33] => 0020252
  [34] => 0020284
   .
   .
   .
)

見事に添え字が飛んでます。
飛んでる値を見るに重複分を消すために使ったarray_unique()が原因だと思われます。

解決方法

どうしても添え字は飛ばないようにしたいですし、array_unique()を使わないで添え字を飛ばさず実装するのはめんどいです。

添え字を埋める方法を Google 先生に聞いたところarray_values()を使えばいいとのこと!
PHP: array_values - Manual

// 1.重複を削除したら…
$array = array_unique($array);
// 2.添え字を振りなおす!
$array = array_values($array);

こんな感じで OK です。