• ベストアンサー

配列の値について

subfouの回答

  • subfou
  • ベストアンサー率0% (0/1)
回答No.3

自己解決したため、そのご報告とお礼のため、自己回答いたします。 結論は『変数名がカブって(重複して)いた』ことが原因でした。 試行を繰り返す中、質問した処理部分のみに起こる現象(値を渡すformのコードを簡素にし、処理方法は同じコードで試した場合、正常に配列として値を格納できている)ということに気付き、最初からコードを見直した結果、値を渡すformのname属性の中に元々「img_thumb」があり、それをextract($_POST);で変数化していたので、元々『$img_thumb』には値が入っていたことになり、おかしな挙動の原因になっていたようです。 ★『$img_thumb[$i]』 → 『$image_thumb[$i]』 に変更すると、見事に解決いたしました。 模索する方向のヒントを与えて頂き、ご回答頂いたお二方には本当に感謝いたします。 どうもありがとうございました。

関連するQ&A

  • 変数の参照?について

    複数の画像とそのサムネイル(自動作成)を登録(保存)、表示するスクリプトを作っています。 質問は、下記に出現する「$imgname[$i]」「$img_thumb[$i]」の各変数が場所によって参照(反映?)されない問題の解決方法についてです。 1.formを使い、下記のようにして複数の画像ファイルを配列で渡します。 <input type="file" name="img[]" size="100"> 2.そのファイルを受取り、処理する関数は下記のような流れです。 <?php function screen_entconf(){ //保存するディレクトリ define('DIR', 'img/'); //受け取ったファイルをフォルダに振り分け、保存 for ($i = 0; $i <= 2; $i++) { if (is_uploaded_file(@$_FILES["img"]["tmp_name"][$i])) { switch($cateid) { case 1: $imgdir = DIR . "esy/"; break; } $imgname[$i] = basename($_FILES['img']['name'][$i]); $imgfile[$i] = $imgdir . $imgname[$i]; // テンポラリファイルを保存ディレクトリにコピー copy($_FILES["img"]["tmp_name"][$i], $imgfile[$i]); //GDライブラリにてサムネイル作成 <--中略--> //出力先ディレクトリにサムネイルを保存 if (preg_match('/\.jpg$/', $imgname[$i]) > 0) { ImageJpeg($img_out[$i], $imgdir . "s_" . $imgname[$i] ); $img_thumb[$i] = "s_" . $imgname[$i]; } //イメージの開放  【【この位置でechoによる画像&ファイル名表示は可能】】 }  } ?> <form // 確認表示(ファイル名&画像等) ★★↓ここ以降、変数が全く無視され、何も表示されません。★★ <P><?=$imgname[$i]?> <P><?=$img_thumb[$i]?> (…後少し続きますが、補足欄で追記予定) ■何か解決のヒントが頂ければ幸いです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列操作について

    お世話になります。 $obj = array(1 array(id=>111 name=>aaa date=yyyymmdd array(2 array(id=>222 name=>bbb date=yyyymmdd 上記のようなオブジェクト($obj)があるとして この最下層の連想配列データ(id,name,date)を 配列にしたい時は、以下のような書き方で取れると 思いますが、もっとすっきりさせる書き方などありますか? $a = array(); $c = count($obj); for($i=0; $i<$c; $i++){ $a = $obj[$i]['id']; $a = $obj[$i]['name']; $a = $obj[$i]['date']; $i++}

    • ベストアンサー
    • PHP
  • 【PHP】配列の値が上書きされる

    PHP初心者です。 PHPとMYSQLとHTMLでweb画面を作成しています。 ループで、SQLを複数回回し、その結果を配列に格納しようとしているのですが、 配列には毎回最後の一つの結果しか格納されません。 いろいろ調べて、試してみたのですが、どうしても分かりません。 申し訳ありませんが、お分かりの方がいたら、ご教示願えませんでしょうか。 以下にソースを記載します。 ******************************************************** <?php $checkbox = $_REQUEST["chk"]; $pdo = new PDO("mysql:host=localhost; dbname=TESTDB; charset=utf8", "hoge", "hoge", array( PDO::ATTR_EMULATE_PREPARES => false ) ); $results=array(); for($i=0; $i<sizeof($checkbox); $i++){ $sql = "select * from Item where 1 = 1 "; $sql = $sql . " and id=${checkbox[$i]} "; $statement = $pdo->prepare( $sql ); var_dump($sql);   ←★デバッグ用 $statement->execute(); $results = $statement->fetchAll(); } ?> <?php print count(sizeof($checkbox));   ←★デバッグ用 print("<pre>");   ←★デバッグ用 print_r($results);   ←★デバッグ用 print("</pre>");   ←★デバッグ用 ?> ******************************************************** $checkbox = $_REQUEST["chk"]; の部分ですが、前のページでチェックボックスに3箇所チェックを入れて、その情報を格納しています。 var_dump($sql)の結果、 string(41) "select * from Item where 1 = 1 and id=8 " string(41) "select * from Item where 1 = 1 and id=9 " string(42) "select * from Item where 1 = 1 and id=10 " と、ちゃんと3つ認識しています。 しかし、 print("<pre>"); print_r($results); print("</pre>"); の結果が、 Array ( [0] => Array ( [id] => 10 [0] => 10 [item_name] =>商品1 [1] => 商品1 [price] => 10000 [2] => 10000 [rfu1] => [3] => [rfu2] => [4] => [rfu3] => [5] => [memo] => comment [6] => comment ) ) と、最後の1つしか格納されていないのです……。

    • ベストアンサー
    • PHP
  • 区切り文字を配列に格納する方法を教えて下さい。

    区切り文字を配列に格納する方法を教えて下さい。 $array[] = "abc,1981,1,12"; $array[] = "def,1982,2,18"; $array[] = "ghi,1991,4,12"; list($name[$i],$yy[$i],$mm[$i],$dd[$i]) = split("\,",$array[$i]); でループさせればそれぞれの変数に代入できますが、例えば $name["abc"]["yy"] = "1981"; $name["abc"]["mm"] = "1"; $name["abc"]["dd"] = "12"; のように分解するにはどうすれば良いでしょうか?

    • 締切済み
    • PHP
  • 二次元配列のソート PHP

    タイトルのとおりソートを行ってくれる関数を探しております。 $buf[][]の二次元配列の変数を日付の降順に並べ替えたいのですが、そういった関数は用意されていますか? sort()、rsort()では不可能かと思います。 以下、二次元配列の値です。配列三番目の日付の降順で再格納したいです。 ( [0] => Array ( [0] => 1[1] => name1 [2] => 2006-08-18 ) [1] => Array ( [0] => 2 [1] => name2[2] => 2006-08-28 ) [2] => Array ( [0] => 3[1] => name3 [2] => 2006-08-18 ) [3] => Array ( [0] => 4 [1] => name4[2] => 2006-08-18 ) よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • foreachで多次元配列を生成

    こんにちわ。 配列をforeachでループさせて、それを多次元配列に入れていくことは可能でしょ うか? 例えば以下のようなデータがあるとします。 ---meibo.dat-------- c21<>田中<>21<>東京 c22<>佐藤<>22<>大阪 -------------------- ---test.php----------------------------------------------------- <? $list_meibo = file("meibo.dat"); foreach($list_meibo as $temp){    $i=split("<>",$temp);    $a=array($i[0] => array("name"=>$i[1],"age"=>$i[2],"ad"=>$i[3]),); } ?> ------------------------------------------------------------------- これでは $a=array("c21"=>array("name"=>"田中","age"=>"21","ad"=>"東京"), "c22"=>array("name"=>"佐藤",age"=>"21","ad"=>"大阪"),); という具合になってくれないでしょうか? これでいくと、配列の最後の要素のみデータに残ります。 どのようにしたらよいでしょうか? ご教授お願いします。

    • ベストアンサー
    • PHP
  • upload.php内のページ転送について

    header Locationの転送について教えてください。 PHPファイル内で画像プレビューを表示させ ページ転送を行いたいです。 しかし、プレビューが表示される部分に 転送先の<header>(html5)の内容が表示されてしまいます。 どこが悪くてどう直せば良いのでしょうか? どなたか教えてください。 <?php header("Location: http://www.********.com/"); ?> <?php //前にアップロードされた写真のファイル名 $postPhotoName = $_POST["postPhotoName"]; $result = false; if($_FILES['img']['name'] == "") { die("ファイルがないぜよ。"); }else{ //アップロードされたファイルの情報を取得 $fileName = basename(date("U")."-".$_FILES['img']['name']); $fileType = $_FILES['img']['type']; $fileTmpName = $_FILES['img']['tmp_name']; if(!preg_match("/jpeg/",$fileType)){ unlink($fileTmpName); die( "jpegじゃないぜよ。"); }else{ //ファイルの保存 if (!move_uploaded_file($fileTmpName, 'thumbimg/' . $fileName)) { die('保存にしっぱいしたぜよ。'); } else { //サムネイル作成 include('class.image.php'); list($width, $height, $type, $attr) = getimagesize('thumbimg/'.$fileName); $thumb = new Image('thumbimg/'.$fileName); $thumb->name('thumb-'.basename($fileName,".jpg")); if($width>$height){ if($width > 380) $thumb->width(380); }else{ if($height > 400) $thumb->height(400); } $thumb->save(); $result = true; } } } if($result == true){ ?> <img src="<?php echo 'thumbimg/thumb-'.$fileName;?>"> <input type="hidden" value="<?php echo $fileName?>" name="postPhotoName" id="postPhotoName"> <?php }

    • 締切済み
    • PHP
  • 配列の中身をボタンをおすことによって順次表示させたいです

    $files は配列です。 この中に値が格納されております。 この値をNEXTボタンを押すことによって順次表示させていきたいです。 どのようにしたらよいのでしょうか? <?php if($_POST['next']){ echo "<img src=\"img/$files[4]\">"; } ?> <form method="post" action="test.php"> <input type="submit" name="next" value="NEXT" > </form>

    • ベストアンサー
    • PHP
  • 多次元配列がさっぱりです。

    var img = ["test01.jpg", "test02.jpg", "test03.jpg", "test04.jpg"]; var name = ["テスト1", "テスト2", "テスト3", "テスト4"]; for (var i = 0; i < img.length; i ++) { document.write('<img src="../img/' + (img[i]) + '" width="132" height="160" border="0" />' + '<br />'); for (var j = 0; j < name.length; j ++){ document.write((name[j])); } } 全然駄目です・・・ 画像があって、画像の下に var name を表示したいんですが、分かりませんでした。分かるかた、教えてください!

  • 多次元配列を、1次元の配列にする関数を書いてください。

    以下のように、多次元配列の配列をペチャンコにする関数(array_flatten)ってどうかきますか? <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flatten($arg){   処理; } $new_arr = array_flatten($arr); print_r($new_arr); ?> ↓ Array (   [0] => a   [1] => b   [2] => c   [3] => d   [4] => e   [5] => f   [6] => g   [7] => h   [8] => i ) ※関数のなかで、ペチャンコの配列を格納するための新しい配列を宣言すると、 同関数を再帰的に呼び出したら、その配列が初期化されますよね?

    • ベストアンサー
    • PHP