getImages($ID) という独自で作った関数での疑問ですが、引数に、整数をセットすると、画像ファイルへのパスを取り出す単純な関数です。

これに、直接、整数値を入れて、
(例えば 引数に適当に34)
$data = getImages(34);

print_r($data);

のようにすると、この場合は、print_r()で確認すると、値は入っているのですが

Array
(
[img] => Array
(
[0] => img/30287978.jpg
)
)


多次元配列に入った数値をそのまま代入すると、同じように出力しても、空で出力されます。

$data = getImages($number['user_id'][0]['image']);
print_r($data);

Array
(
[img] => Array
(

)
)

これはなぜなんでしょう? 解決したいのですが、もし心当たりがありましたら、アドバイスください。よろしくお願いします。

質問者からの補足コメント

  • 関数にセットした、 $number['user_id'][0]['image'] をechoしてみると、数値は表示されるので、中身は入っています。

      補足日時:2017/05/14 23:09

A 回答 (2件)

どういうときに、どんな風にダメなのかを調べて、法則を見つけて直す。


プログラミングはそれの繰り返しです。

今回の場合、
・入力が、getImages関数が期待するものではない
・getImages関数が、期待とは違う動作をしている
の2つがまず考えられます。

> $number['user_id'][0]['image'] をechoしてみると、数値は表示される

とあります。
ならば、それを直接getImagesに指定したらどうなりますか?

「数値は表示される」は本当に「数値」なのでしょうか?
「数字の並んだ文字列」だったりしませんか?
表示したときに同じに見えても、内部では「数値」と「文字列」は別扱いされます。
$data = getImages(34);
だと大丈夫で
$data = getImages('34');
だとだめだとか。
http://php.net/manual/ja/function.var-dump.php
print_rではなく、var_dump ならどうなりますか?


また、その「数値」を指定したときに、
「対応する画像が無いので空になる」
のが
「正しい動作」
ということも考えられます。
    • good
    • 0
この回答へのお礼

ありがとうございます。要因は後者のほうでした。変数が空でした。
簡単なSNSを作っているのですが、新規会員登録した方の画像を表示する部分を作っていました。また、その部分をループで引数に入れて出力していたのですが、新規ということで画像を登録していなかったので、表示することができないという、なんとも初歩的なミスでした。また、確認で出力する際は、検証するために、既に画像を設定した会員のIDの数値を直接使っていたので、気づきませんでした。

お礼日時:2017/05/15 08:22

途中にある


Array
(
[img] => Array
(
[0] => img/30287978.jpg
)
)
とその次の
$data = getImages($number['user_id'][0]['image']);
との間にはどのような関係があるのでしょうか?

ただ, このような質問は, まずはその関数を作った人間にするべきだと思うよ.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qprint "{$data[$i][$j]}";の $dataと「直接関係」がある

<!DOCTYPE html>
<html>
<head>
<title>P185 Sample6-15▸ 多次元配列</title>
</head>
<body>

<?php

$data[0][0] = "東京";
$data[0][1] = 32;//$data[0][●]に東京のデータを格納します。
$data[0][2] = 25;
$data[1][0] = "名古屋";
$data[1][1] = 28;//$data[1][●]に名古屋のデータを格納します。
$data[1][2] = 21;
$data[2][0] = "大阪";
$data[2][1] = 27;//$data[2][●]に大阪のデータを格納します。
$data[2][2] = 20;
$data[3][0] = "京都";
$data[3][1] = 26;//$data[3][●]に京都のデータを格納します。
$data[3][2] = 19;
$data[4][0] = "福岡";
$data[4][1] = 27;//$data[4][●]に福岡のデータを格納します。
$data[4][2] = 22;

?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>都市名</th>
<th>最高気温</th>
<th>最低気温</th>
</tr>

<?php

for($i=0; $i<count($data); $i++){
print "<tr>";
for($j=0; $j<count($data[0]); $j++){
print "<td>{$data[$i][$j]}</td>";//配列の要素を出力する。
}
print "</tr>\n";
}

?>

</table>

</body>
</html>
以上ですが・・・だんだん難しくなってきました!
 さて
  print "<td>{$data[$i][$j]}</td>";の $dataと「直接関係」があるところは
 1) for($j=0; $j<count($data[0]); $j++){  
 2)$data[0][0] = "東京";~$data[4][2] = 22;
  の1)2)のどちらと「直接関係」があるのでしょうか?
 以上よろしくお願いいたします。

<!DOCTYPE html>
<html>
<head>
<title>P185 Sample6-15▸ 多次元配列</title>
</head>
<body>

<?php

$data[0][0] = "東京";
$data[0][1] = 32;//$data[0][●]に東京のデータを格納します。
$data[0][2] = 25;
$data[1][0] = "名古屋";
$data[1][1] = 28;//$data[1][●]に名古屋のデータを格納します。
$data[1][2] = 21;
$data[2][0] = "大阪";
$data[2][1] = 27;//$data[2][●]に大阪のデータを格納します。
$data[2][2] = 20;
$data[3][0] = "京都";
$data[3][1] = 26;//$data[3][●]に京都の...続きを読む

Aベストアンサー

> の1)2)のどちらと「直接関係」があるのでしょうか?

No.1さんと同じく質問の意味が理解できません。
わかり易く補足いただいた方が良いかと思います。



”の1)2)のどちらと「関係」があるのでしょうか?” というご質問であれば

”どちらとも関係あります” という回答になります。

Q$str=preg_replace('/\u3000/','  ',$str);

によってutf-8の空白文字をhtmlの空白文字に変換しようとしたのですがエラーになります
どうしたらいいのでしょうか?

Aベストアンサー

>そもそも?のところにコード表現で空白文字を入力する手段はないのでしょうか?
\xE3\x80\x80
で一応いいかと思いますが…

Q$_SERVER["HTTP_HOST"]と$_SERVER["SERVER_NAME"]の違い(というか意味合い)は?

phpのバージョンは、5.1.6で、OSのバージョンはCentOS4.4です。

お聞きしたいのですが、
$_SERVER["HTTP_HOST"]と$_SERVER["SERVER_NAME"]の違い(というか意味合い)はなんでしょうか?

phpinfoでみても、同じの場合したことがみたことがないもので。

ご存じの方いらっしゃいましたら、お教えいただければ幸いです。

よろしくお願いいたします。

Aベストアンサー

$_SERVERはサーバーの環境変数やPHPの情報を保存した配列です。
$_SERVERのうち、環境変数はgetenv()でも取得できます。

$_SERVER["SERVER_NAME"]で取得できる名前は
Apacheの場合はhttpd.confで、
UseCanonicalNameがOnになっているときに、ServerNameで指定された値が使われます。
UseCanonicalNameがOffになっていると、ドメイン名やIPアドレスになります。
UseCanonicalNameがOffになっていて、http://127.0.0.1:8001/のようにポート指定でアクセスした場合は、ポート番号は除かれます。

HTTP_HOSTはHTTPでアクセスしたときのホスト名、つまりドメイン名+ポート番号がそれに当たります。
(厳密には違うかも知れませんが、、、)
http://www.ietf.org/rfc/rfc2616.txt

VirtualHostを使ってポート指定でアクセスすると違いが出ますが、
デフォルトでUseCanonicalNameはOffになっていますし、ホスティングサービスではOnにする理由もありません。
http://httpd.apache.org/docs/2.0/ja/mod/core.html#usecanonicalname
(「これが有用な場合の例は、」の段落参照。主にイントラネット向け?)

、、、と書くのはいいとして、私自身、UseCanonicalNameやホスト名の意味や使い方をわかっていません。
こうすれば違いが出るということだけですが、
ご参考まで。

$_SERVERはサーバーの環境変数やPHPの情報を保存した配列です。
$_SERVERのうち、環境変数はgetenv()でも取得できます。

$_SERVER["SERVER_NAME"]で取得できる名前は
Apacheの場合はhttpd.confで、
UseCanonicalNameがOnになっているときに、ServerNameで指定された値が使われます。
UseCanonicalNameがOffになっていると、ドメイン名やIPアドレスになります。
UseCanonicalNameがOffになっていて、http://127.0.0.1:8001/のようにポート指定でアクセスした場合は、ポート番号は除かれます。

HTTP_HOST...続きを読む

Q$_FILES['x']['error']について

知っている方いましたらご教授お願いいたします。

■事象
PHPにて画像ファイルのアップロードを作っています。
その際に、「jpg」なのに、アップロードできない画像ファイルがあります。

以下の、メッセージを取得する際には【15】が戻り値として返ってきます。
⇒$error = $_FILES['x']['error'];

エラー一覧をみても【15】というのは存在していないようで、
何が原因なのかがよくわかっていません。

■ファイルをvar_dumpしたところ
var_dump($_FILES['x']);
⇒出力結果
array(5) { ["name"]=> string(8) "attt.jpg" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(1) ["size"]=> int(0) }

そもそも取得できていない・・・

■原因と思われるもの??
UPできない、画像のプロパティを見てみると
詳細の色の表現が「sRGB」となっています。
これが原因でしょうか?

■ファイルアップロードに関するエラーコード。
0: エラーなし。ファイルアップロード成功。
1: ファイルサイズが、「php.ini」の「upload_max_filesize」の値を超えている。
2: ファイルサイズが、送信フォームで指定した「MAX_FILE_SIZE」の値を超えている。
3: 一部しかアップロードされなかった。
4: アップロードされなかった。
6: テンポラリフォルダがない。
7: ディスクへの書き込みに失敗。
8: PHP拡張モジュールがファイルアップロードを中止。

以上、ご回答のほどよろしくお願いいたします。

知っている方いましたらご教授お願いいたします。

■事象
PHPにて画像ファイルのアップロードを作っています。
その際に、「jpg」なのに、アップロードできない画像ファイルがあります。

以下の、メッセージを取得する際には【15】が戻り値として返ってきます。
⇒$error = $_FILES['x']['error'];

エラー一覧をみても【15】というのは存在していないようで、
何が原因なのかがよくわかっていません。

■ファイルをvar_dumpしたところ
var_dump($_FILES['x']);
⇒出力結果
array(5) { ["name"]=> string(8) "attt....続きを読む

Aベストアンサー

var_dump(array_keys(preg_grep('/^15$/', get_defined_constants())));

上記のコードを用いて、エラーコード15を表す定数に何があるかどうか、そちらのPHP環境で調べてみてください。ideone.com上で調べてみたところ

・FORCE_DEFLATE
・ZLIB_ENCODING_DEFLATE
・XML_ELEMENT_DECL_NODE
・MHASH_TIGER160
・SIGTERM
・IMAGETYPE_WBMP
・SOCKET_ENOTBLK
・XML_ERROR_BINARY_ENTITY_REF

が存在していました。「SIGTERM」は強制終了を表すシグナルです。アップロード処理中にPHPコアで何らかのエラーが発生し、強制的に実行を中断させられた、と考えるのが妥当ではないでしょうか。もし古いバージョンのPHPを使ってる場合は最新版にアップデートしてください。

アップロードの例外処理に関してはこちらを参考にどうぞ。
http://qiita.com/mpyw/items/939964377766a54d4682
http://qiita.com/mpyw/items/73ee77a9535cc65eff1e

var_dump(array_keys(preg_grep('/^15$/', get_defined_constants())));

上記のコードを用いて、エラーコード15を表す定数に何があるかどうか、そちらのPHP環境で調べてみてください。ideone.com上で調べてみたところ

・FORCE_DEFLATE
・ZLIB_ENCODING_DEFLATE
・XML_ELEMENT_DECL_NODE
・MHASH_TIGER160
・SIGTERM
・IMAGETYPE_WBMP
・SOCKET_ENOTBLK
・XML_ERROR_BINARY_ENTITY_REF

が存在していました。「SIGTERM」は強制終了を表すシグナルです。アップロード処理中にPHPコアで何らかのエラーが発生し、強...続きを読む

Q$a[0]='w';$a[1]='r';を1回で

$a=array();
$a[0]='w';
$a[1]='r';
2行目と3行目を$a=はてな('w','r');
のように書くことはできませんか?

Aベストアンサー

こんにちは。

$a = array ( 'w', 'r' );

でいけると思いますが。

http://fol.axisz.jp/php/man/php/function.array.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報