フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【PHPエラー】Fatal error: Uncaught TypeError: array_push()の原因と解決方法

array_push()
Fatal error
PHP
プログラムエラー

PHPでプログラミングをしていると予期せぬプログラムエラーが表示されることがあります。
Fatal error: Uncaught TypeError: array_push()...もそのうちの1つです。

この記事では、Fatal error: Uncaught TypeError: array_push()...が起こる状況と解決方法をご紹介したいと思います。

Fatal error: Uncaught TypeError: array_push()が発生する原因

まずは実際にFatal error: Uncaught TypeError: array_push()...がどんなふうにエラー文章が表示されるか見てみましょう。

Fatal error: Uncaught TypeError: array_push(): Argument #1 ($array) must be of type array, null given in ●●●:■■■ Stack trace: #0 ●●●(■■■): array_push(NULL, 'XXX') #1 {main} thrown in ●●● on line ■■■

このようなエラー文章が表示されます。
このプログラムエラーはarray_push()関数を使った時にだけ発生します。

このエラー文章からは以下のようなことがわかります。

  • ●●●:プログラムエラーの原因のファイル名のパス
  • ■■■:定義されていない配列にarray_push()しようとしている行数

上の場合は、エラー文章の途中にnullと書かれています。
つまり、このプログラムエラーは「●●●あるファイルの■■■行目で定義されていない配列にarray_push()関数を使っている」ため発生します。

array_push($data, 'XXX');

上のようなコードの場合、Fatal error: Uncaught TypeError: array_push()...が表示します。

array_push()関数は配列に値を追記するために使用するPHP関数です。
そのため、このプログラムエラーは変数に対してarray_push()関数を使った場合も発生します。

文字列が格納されている変数の場合、

$data = "XXX";
array_push($data, 'YYY');

以下のようなエラー文章が表示されます。

Fatal error: Uncaught TypeError: array_push(): Argument #1 ($array) must be of type array, string given in ●●●:■■■ Stack trace: #0 ●●●(■■■): array_push('XXX', 'YYY') #1 {main} thrown in ●●● on line ■■■

また、数値が格納されている変数の場合、

$data = 123;
array_push($data, 'XXX');

以下のようなエラー文章が表示されます。

Fatal error: Uncaught TypeError: array_push(): Argument #1 ($array) must be of type array, int given in ●●●:■■■ Stack trace: #0 ●●●(■■■): array_push(123, 'YYY') #1 {main} thrown in ●●● on line ■■■

Fatal error: Uncaught TypeError: array_push()の解決方法

Fatal error: Uncaught TypeError: array_push()...が発生した場合は、array_push()関数を使う前に配列を定義するようにします。
また、変数に対してarray_push()関数を使わないように注意します。

$data = []; // 配列を定義
array_push($data, 'XXX');

// var_dump($data);
// array(1) { [0]=> string(3) "XXX" }

まとめ

いかがでしたか?
このプログラムエラーは変数なのか、配列なのかしっかり把握することで防ぐことが出来るエラーですね。