• ベストアンサー

illegal string offset

agunuzの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

if ($a['exists']['non_existent']) { $a['exists'] は存在するという前提で、php5.3と同じ動作を期待するなら if (isset($a['exists']['non_existent']) ? $a['exists']['non_existent'] : substr($a['exists'], 0, 1)) { ですかねぇ。

toyoshima72
質問者

お礼

お礼が遅れました。ありがとうございました。

関連するQ&A

  • PHP4から5への移行に伴うFatal error:Cannot use string offset as an array というエラーについて、

    php4から5へ移行した際以下のエラーがでてしまいました、以前はうまく稼動したんですが・・・。どうしても原因がわからないのでどなたか教えていただけたら幸いです。 Fatal error: Cannot use string offset as an array in /home/.sites/106/site3/web/make_rss/lib/Init_class.php on line 344 ------------------------------------------------------ 332 $ex = "0"; 333 for($i=0; $i<$count; $i++){ 334 if($string[$i][4] == "1" or $string[$i][4] == "2"){ 335 $str[$ex][0] = $string[$i][0]; 336 $str[$ex][1] = $string[$i][1]; 337 $str[$ex][2] = $string[$i][2]; 338 $str[$ex][3] = $string[$i][3]; 339 $str[$ex][4] = $string[$i][4]; 340 $str[$ex][5] = $string[$i][5]; 341 $ex++; 342 } 343 } ---------------------------------------------------- ちなみに変数$stringは、print_r($string);で以下のように表示されます↓ Array ( [0] => Array ( [0] => 2006年10月31日PM05:59 [1] => test [2] => test [3] => test [4] => 1 [5] => 1 ) ) ---------------------------------------------------- 以上です。どうかお願いいたします。

    • ベストアンサー
    • PHP
  • PhpMyAdminにおけるデータベース表示の不備

    個人でネットワークプログラミングを行うため、以下の環境を入れています。 ・PHP Version 5.2.4 ・MySql 5.0.45 ・phpMyAdmin - 2.11.5 ログインなどは出来たのですが、データベースを表示する画面になると以下のエラーメッセージが表示され、データベース一覧が表示できません。 ---------------------------------------------- エラーメッセージ: Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 172 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 172 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 172 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 172 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 172 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 172 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 172 合計: 1 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 260 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 260 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 260 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 260 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 260 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 260 Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in [phpmyadminまでのパス]\phpMyAdmin\server_databases.php on line 260 ---------------------------------------------- ソースを眺めていたところ、server_databases.phpにおけるarray_key_exists()で$stat_name, $first_databaseを引数に命令を行っているようですが、$first_databaseに値が設定されていない(=null)ためエラーが起こっているようでした(null避けによりエラーメッセージは出現しなくなった)。 しかし、$first_databaseにはデータベース一覧の情報が入るべきらしく、この値がnullということはありえません。つまり、データベース一覧を取ってこれていないのだろうと仮定したのですが、それ以降の対策が見つかりません。 かれこれ3時間程度迷いました。解決方法を知っている方は教えてください。どうかお願いします…。

  • 配列を返す関数

    Perlではこのようにして複数の値を返して変数に一度に代入することができますが、 ($foo,$bar) = &hoge(); print "$foo,$bar\n"; sub hoge { return ('foo','bar'); } PHPでも同様のことはできますか? それとも以下のように分けて書くしかないですか? <?php $a = hoge(); $foo = $a[0]; $bar = $a[1]; print "$foo,$bar\n"; function hoge() { return array('foo','bar'); } ?>

    • ベストアンサー
    • PHP
  • preg_replaceでの警告

    PHP5.2.4を使用しています。 CakePHPというフレームワークの中の関数で、次のような Warning (2): preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 6 という警告がでるのですが、preg_replace関数の第4引数を指定してないからなのかな?と思い、 1という数字を指定してみたりしたのですが、同じような警告が出てしまいます・・・ たぶんバージョン間の違いだと思いますが、 この場合は、たとえば警告を出さないフラグを変更する以外に preg_replace関数をどのように記述すれば良いのでしょうか? function slug($string, $replacement = '_') { if(!class_exists('String')) { require_once LIBS . 'string.php'; } $map = array( '/a|a|a|a/' => 'a', '/e|e|e|?|e/' => 'e', '/i|i|i/' => 'i', '/o|o|o|o/' => 'o', '/u|u|?|u/' => 'u', '/c/' => 'c', '/n/' => 'n', '/a|a/' => 'ae', '/o/' => 'oe', '/u/' => 'ue', '/A/' => 'Ae', '/U/' => 'Ue', '/O/' => 'Oe', '/s/' => 'ss', '/[^\w\s]/' => ' ', '/\\s+/' => $replacement, String::insert('/^[:replacement]+|[:replacement]+$/', array('replacement' => preg_quote($replacement, '/'))) => '', ); /* print "string=$string<br>\n"; print_r(array_keys($map)); print_r(array_values($map)); */ $string = preg_replace(array_keys($map), array_values($map), $string); return $string; } string=test<br> Array ( [0] => /a|a|a|a/ [1] => /e|e|e|?|e/ [2] => /i|i|i/ [3] => /o|o|o|o/ [4] => /u|u|?|u/ [5] => /c/ [6] => /n/ [7] => /a|a/ [8] => /o/ [9] => /u/ [10] => /A/ [11] => /U/ [12] => /O/ [13] => /s/ [14] => /[^\w\s]/ [15] => /\s+/ [16] => /^[_]+|[_]+$/ ) Array ( [0] => a [1] => e [2] => i [3] => o [4] => u [5] => c [6] => n [7] => ae [8] => oe [9] => ue [10] => Ae [11] => Ue [12] => Oe [13] => ss [14] => [15] => _ [16] => )

    • 締切済み
    • PHP
  • PHPの配列について

    PHPの配列についての質問です。 以下のソースを // == ソース == function hoge( $foo ) { $arrs['a'] = 'A'. $foo; $arrs['b'] = 'B'. $foo; $arrs['c'] = 'C'. $foo; $arrs['d'] = 'D'. $foo; } hoge( '3' ); hoge( '9' ); // == /ソース == 実行すると print_rは // == print_r == Array (   [a] => A3   [b] => B3   [c] => C3   [d] => D3 ) Array (   [a] => A9   [b] => B9   [c] => C9   [d] => D9 ) // == /print_r == のようになります。 これを 関数を実行するごとに (0から IDのような 配列を組むようにする) 以下のようにするには どのようにすればよいでしょうか? // == print_r == Array (   [0] => Array     (       [a] => A3       [b] => B3       [c] => C3       [d] => D3     )   [1] => Array     (       [a] => A9       [b] => B9       [c] => C9       [d] => D9     ) ) // == /print_r == 使用目的は get_contentsしたものを正規表現で取り出し 配列にする処理に使おうと思っています。

    • ベストアンサー
    • PHP
  • 異なるページへ配列を渡したいのですが、うまくいきません。どうすればよい

    異なるページへ配列を渡したいのですが、うまくいきません。どうすればよいでしょうか? ■現状 APIへアクセスを行い、 simplexml_load_stringを使って、 カテゴリー階層部分を取得して、配列$hitsへ格納しています。 $xml = simplexml_load_string (引数); $hits = $xml->カテゴリー階層部分; これを別ページへ丸まる渡す方法が分かりません。 ネットで検索したところ、 フォームの隠し項目で配列データを渡したい時、という項目があり、 自分がやりたいケースにあてはまるかなと思い試してみたのですが、うまくいきませんでした。 ▽配列データをエンコード、デコードして送受信する - 覚え書き PHP Sample   http://antonsan.net/study/php/php013.php ■試してみた内容 ▽渡す前のページ <form action="**.php" method="get"> <input type="hidden" name="array_enc" value="<?php echo base64_encode(serialize($hits)) ?>"> ▽渡した後のページ print_r(unserialize(base64_decode(@$_GET["array_enc"]))); var_dump($hits); ▽画面でのエラー表示 Warning: unserialize() [function.unserialize]: Node no longer exists in **.php on line 5 SimpleXMLElement Object Warning: print_r() [function.print-r]: Node no longer exists in **.php on line 5 ( ) NULL ■ やりたいことは、別ページへ配列を渡したいだけなのですが、どうすればよいのでしょうか? (特にエンコード、デコード等にこだわりはありません)

    • ベストアンサー
    • PHP
  • StringクラスのcompareToメソッド

    ArrayListに登録した文字列を五十音順にソートしようと思いComparator を使用して 以下のようなサンプルプログラムを作ってみました。 ところが想定していたような {赤ちゃん、富士山、山口県}とはならず {富士山、山口県、赤ちゃん} というような結果になりました。 compare() の戻り値の部分を return ((String)arg1).compareTo((String)arg0); に変更しても{赤ちゃん、山口県、富士山} となり辞書の並びとは異なる結果になりました。 辞書順に並べるにはなにかよい方法はありますでしょうか。 public class compareTest { public static void main(String[] args) { ArrayList<String> array = new ArrayList<String>(); String a = "赤ちゃん"; String b = "山口県"; String c = "富士山"; array.add(a); array.add(b); array.add(c); for(int i=0;i<array.size();i++) { System.out.println("ソート前=" + array.get(i)); } Collections.sort(array, new testComp()); for(int i=0;i<array.size();i++) { System.out.println("ソート後=" + array.get(i)); } } } public class testComp implements Comparator { public int compare(Object arg0, Object arg1) { return ((String)arg0).compareTo((String)arg1); } }

    • ベストアンサー
    • Java
  • string...?

    String filename; Image image; /*入力画像ファイルの名前の取得*/ BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); while(true){ System.out.println("Type image file name."); filename = d.readLine(); File file = new File(filename); if(file.exists() == true){ break; }else{ System.out.println("File not found.\n"); } } /*画像の取り込み*/ Toolkit tk = Toolkit.getDefaultToolkit(); image = tk.getImage(filename); . . . という画像の名前を入力してそれがあれば読み込むというプログラムです(激省略)。 コンパイルはできたのですが、実行して名前をいれるとエラーが起きます。 Warning: Cannot convert string "-ryobi-minchol-medium-r-normal--*-140-*-*-c-*-jisx0208.1983-0" to type FontStruct とこんなのが。 解決策をお願いします。 一応環境をいっておくと turbolinux7 bashで実行です。

    • ベストアンサー
    • Java
  • エラーが出ないようにしたいのですが?

    <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php echo'テストプログラム開始',PHP_EOL; $ret1 = array_reverse(); $ret2 = array_reverse(1); echo'テストプログラム終了',PHP_EOL; ?> </body> </html>  以上のプログラムを実行すると、  以下のエラーが出るように組まれたプログラムです。   エラーが出ないプログラムにするには、どんなプログラムを組めばできますか!?   早々ですが^^    今年もよろしくお願いいたします。 テストプログラム開始 Warning: array_reverse() expects at least 1 parameter, 0 given in C:\xampp\htdocs\study.localhost\E_WARNING.php on line 9 Warning: array_reverse() expects parameter 1 to be array, integer given in C:\xampp\htdocs\study.localhost\E_WARNING.php on line 10 テストプログラム終了

    • ベストアンサー
    • PHP
  • 正規表現に関する質問

    以前もここで質問したものです。皆様の解答をヒントに一歩進みました。 C言語のソースコードを扱っています。 デバッグのため(関数がどういう順番で呼び出されているかを知るため)、関数の先頭にprint文をつけようと思っています。 例えば、 int hoge(引数の並び) { 関数の中身 } なら int hoge(引数の並び) { printf("hoge"); 関数の中身 } といった具合です。 関数が膨大なので、手作業で一つずつprintfを書くのは現実的ではありません。 ここで、 open(IN,"$ARGV[0]"); @array = <IN>; for($i=0;$i<@array;$i++){ if($array[$i] =~ / _*.+\(.*\)/){ $tmp = $&; if($array[$i+1] =~ "^{\n"){ print $array[$i]; print $array[$i+1]; print "printf(\"FileName:$ARGV[0] FunctionName:"; print $tmp; print "\");"; print "\n"; $i++;} else{ print $array[$i]; } }else{ print $array[$i]; } } というコードを書きました。しかしこれでもうまくいかないケースが多々ありました。 int main(void) { intro(); new_game(); /* @@@ exit(0); */ /* causes a warning in C++ */ return(0); } のように返り値が横ではなく上についていたり、 void __ast_string_field_index_build(struct ast_string_field_mgr *mgr, ast_string_field *fields, int num_fields, int index, const char *format, ...) { のように引数が複数行にわたる場合です。 どのようにしたらよいのでしょうか。 どなたか教えてもらえませんか?

    • ベストアンサー
    • Perl