質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

29530閲覧

PHP Fatal error: Unsupported operand types

poteto

総合スコア142

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2014/03/28 08:08

PHP5.2、Apacheにて、キーの配列を保ちつつ配列マージを行おうとしたところ
Fatal error: Unsupported operand types
というerrorを吐きました。
サポートされてない演算子をタイプしたと言われているものの、どこが悪いのかがわかりません。PHPリファレンスを見てきちんと配列演算子を使用したつもりです。

記述した配列マージ用のコードはこれです。
$values['taxonomy'] = $values['taxonomy'] + $t_arr;

不思議なことに、処理データの量が少ない時はこのerrorは出ないようです。問題なく対処できます。しかし処理データの量が増えると配列のマージが不可能になります。

問題が起こらず、配列のマージが完了した場合
[taxonomy] => Array( [tags] => Array( [1] => Conditionality, Financial architecture, IFIs general, IMF, Intern,ational) [2] => 343)

と表示されます。[2]と[tags] は同じ階層に置いています。

処理データ量の問題なのか、またはコードミスなのか、はたまたPHPのバージョン、Apacheのバージョンのせいなのでしょうか。
さっぱり分からなかったため、こちらで質問させていただきました。
よろしければ回答をお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「PHP Fatal error: Unsupported operand types」

このエラーは、どちらかが配列ではないという可能性があります。

if (!is_array($values['taxonomy'])) { $values['taxonomy'] = (array)$values['taxonomy']; } if (!is_array($t_arr)) { $t_arr = (array)$t_arr; }

このように、両方の型をあわせることでエラーは改善するかと思いますが、こういったエラーが出る時点で事前処理に誤りがあることが多いので、前処理からしっかりと確認することをおすすめします。

if (!is_array($values['taxonomy'])) { echo 'ERROR $values[\'taxonomy\'] is not array'; print_r($values['taxonomy']); } if (!is_array($t_arr)) { echo 'ERROR $t_arr is not array'; print_r($t_arr); } $values['taxonomy']=$values['taxonomy'] + $t_arr;

また、こういったエラー処理も有効かと思います。

投稿2014/05/02 07:12

aviva

総合スコア130

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

phpは「動的型付け」といわれる言語で、変数の型が勝手にころころ変わってしまう言語です。
動的型付けの対義語として、静的型付けがあり、例を挙げるとjavaなどです。

以下のコードは、javaでは(基本的に)エラーになり、phpでは当たり前に実現できるものです。

php

1$hoge = 'a/b/c'; //$hogeはstring 2$hoge = explode('/', $hoge);//$hogeはarray ['a','b','c'] 3

javaでも無理やり同じことをするには、Object型として変数を定義の上、そのとき何型とみなすかをその都度キャストにて明示する必要があります。
これは、「静的型付け言語では、変数の型が勝手に変わらないから、プログラマがいちいち手動で変えなければいけない」わけです。

java

1public class test 2{ 3 public static void main(String...args) 4 { 5 Object hoge = "a/b/c"; 6 hoge = ((String)hoge).split("/"); 7 for(String elem : (String[])hoge) 8 System.out.println(elem); 9 } 10}

両者を比較してみてください。動的型付けでは、プログラマが型を意識しなくてもコードが書きやすい反面、場合によっては型が勝手に変わって矛盾を生むことによるエラーが起きやすいです。
ご質問における「不思議なこと」の正体は、「型が勝手に変わる」という動的型付けの性質そのものです。
一方静的型付けでは、プログラマが型を意識しなければいけませんが、型が変わることがないので、ご質問のような「不思議なこと」が起こりません。

投稿2020/02/25 22:16

17ec084

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問