ADODBで_convertObjectした結果をforeach的に取得する方法

このQ&Aのポイント
  • ADODBでfetchnextObject()して取得したオブジェクトは、次のように配列ではなくオブジェクト型で返されます。
  • $a をprint_r()してみると、adofetchobj Object ( [ID] => 1111 [cccc0] => 2222 [cccc1] => 3333 [cccc2] => 4444 ) この時、ID, cccc0, cccc1, cccc2といった、ADODB API呼び出し元にとっては未知のフィールドを, 呼び出し元がforeach的に、簡単に調べる方法はありますでしょうか?
  • foreach($a as $value)){ //この場合、$aは連想配列ではないため、syntax errorの模様 }
回答を見る
  • ベストアンサー

ADODBで_convertObjectした結果をforeach的に取得する方法

ADODBでfetchnextObject()して取得したオブジェクトは、 次のように配列ではなくオブジェクト型で返されます。 $result = $db->PageExecute("select * from hoge order by id desc", 10, 1); $a = $result->fetchnextObject(); $a をprint_r()してみると、 adofetchobj Object ( [ID] => 1111 [cccc0] => 2222 [cccc1] => 3333 [cccc2] => 4444 ) この時、ID, cccc0, cccc1, cccc2といった、ADODB API呼び出し元にとっては未知のフィールドを, 呼び出し元がforeach的に、簡単に調べる方法はありますでしょうか? foreach($a as $value)){ //この場合、$aは連想配列ではないため、syntax errorの模様 }

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

get_object_vars()をつかってみては? <?php class test { function test(){ $this->x="1"; $this->y="2"; $this->z="3"; } } $test = new test; //print_r($test); foreach(get_object_vars($test) as $key=>$val){ print "{$key}:{$val}<br>"; }; ?>

9ggddn2007
質問者

お礼

yambejp様 アドバイス誠にありがとうございました。 get_objects_varsでArray型に変換してもらい、 問題を解決できました。感謝申し上げます。 function _convertArray(&$result) { $ret = array(); while ($obj = $result->fetchnextObject()) { $a = get_object_vars($obj); array_push($ret, $a); } return $ret; }

関連するQ&A

  • foreachで多次元配列にしたくないのですが……

    foreachで多次元配列にしたくないのですが、多次元配列になってしまいます。 なぜでしょうか? ■$hoge Array (  [0] => 3  [1] => 9 ) ■処理 foreach ($hoge as $val){  $result[]= 関数($val); } ■期待している結果 Array (   [0] => Array     (       [id] => 1       [created_at] => 2013-08-01     )   [1] => Array     (       [id] => 2       [created_at] => 2013-08-02     ) ) ■実際の結果 Array (   [0] => Array     (       [0] => Array          (            [id] => 1            [created_at] => 2013-08-01          )     )   [1] => Array     (       [0] => Array          (            [id] => 2            [created_at] => 2013-08-02          )     ) )

    • ベストアンサー
    • PHP
  • 連想配列とforeach

    連想配列 %hogeにおいて、.name の名前が最後に付く配列の値を取り出したいと思い、下記のようにしました。 foreach ($hoge{/.*\.name$/}) {  print "$_\n"; } としてみましたが期待した出力がされませんでした。こういう描き方って出来ないんでしょうか?それともどこか間違ってますか?

    • ベストアンサー
    • Perl
  • PHPのforeachでMysqlにINSERT

    PHPのforeach文を使いMysqlにデータをINSERTしたいです。 配列$resultは以下のような連想配列になっています。 Array ( [0] => Array ( [A] => 1 [B] => 2 [C] => 3 [D] => 4 [E] => 5 ) [1] => Array ( [A] => 2 [B] => 4 [C] => 6 [D] => 8 [E] => 10 ) ) 上記の連想配列をforeach()文で以下の処理をします。 foreach ($result as $key => $value) { /** * データベースへの追加(新規追加時だけ実行。コメント忘れずに) */ $sql = $pdo->prepare('INSERT INTO sample(a, b, c, d, e) VALUES(:a, :b, :c, :d, :e)'); $sql->execute(array(':a' => $value[A], ':b' => $value[B], ':c' => $value[C], ':d' => $value[D], ':e' => $value[E])); } その後データベースでselect * from test;とすると1行目のデータしか格納されていません。原因が不明です。 print すると期待する配列要素が表示されますので配列のデータ配置不備ではありません。 アドバイス頂きたくお願い申し上げます。

    • ベストアンサー
    • PHP
  • smartyのforeachの使い方

    仮に$strが以下のような配列を持っている場合smartyのtpl側で 出力させたいのですがうまくいきません。 Array ( [0] => Array ( [id] => 1 [name] => 名前 [sub_id] => Array ( [0] => 12 [1] => 13 ) [sub_name] => Array ( [0] => あああ [1] => いいい ) [sub_cnt] => Array ( [0] => 5 [1] => 5 ) ) [1] => Array ( [id] => 1 [name] => 名前 ) ) sub_***は配列が存在するものとしないものがあります。 そしてtpl側は {foreach item=items from=$str} <ul id="side{$items.id}"> {foreach item=item from=$items} <li><a href="index.php?id={$item.sub_id}">{$item.sub_name} ({$item.sub_cnt})</a></li> {/foreach} </ul> {/foreach} とforeachを重ねてみたのですがsub_***の値が表示されない 状態です。 複雑な配列なのですがこの場合どうすればうまく表示させれるの でしょうか?

    • ベストアンサー
    • PHP
  • php5のxpathで結果を連想配列で得るには?

    こんにちは。xpathの結果を連想配列で取得したいのですが、どうすればよいのかわかりません。 ソースは foreach($xml->xpath("/aaa/bbb_id[@id='1']/*") as $key => $value) { $array['$key'] = $value; } という感じで、指定したidの中に存在する子エレメント全て取得しています。 が、$keyは0,1,2...と数字で返ってきてしまいます。 そうではなくて、例えば <aaa> <bbb_id id=1> <hoge>value</hoge> </bbb_id> </aaa> で、"value"を取得したら$keyにはhogeが入ってほしいのですが、どのように書けばいいのでしょうか?

    • ベストアンサー
    • PHP
  • foreachで回してますが…。

    こんばんわ。今PHPを少し触っているものです。 それで画像を表示するプログラムを書いています。 枚数にすると数千枚表示する形になります。 表示の仕方はある条件に紐づけば…という形で、 リンクにてgetで値を持たせて、プログラムのSQLで 条件の絞り込みをして当てはまる画像を取得し、 その中から30枚バラバラで画像を取る型になっています。 画像自体は別サーバに置いてあり、URLで取ってくる形です。 画像は1枚が大きめのサイズで真ん中に表示、 残りの29枚がその画像の下にフォトスライダーを 作り、そこで小さく表示という形式になっています。 ※http://opiefoto.com/articles/photoslider#example ざっくり見た感じ、こんな感じです。 画像の取得は二次元配列にしていて、 [0][id] [path_a] [path_b] [path_c] [path_d] [1][id] [path_a] [path_b] [path_c] [path_d] [2][id] [path_a] [path_b] [path_c] [path_d]… のような形で点字の箇所で画像の種類を分けており、 その中の連想配列は[path_a]は大画像用画像のURL、 [path_b]は少し小さい画像用の画像URL、 [path_c]は下のフォトスライダー用のサイズ画像という風に 分けています。 やり方は点字の[0]の部分を真ん中に大画像として 表示させていて、残りの29個の配列は 小さいサイズのURLを取得して下のフォトスライダーに出してます。 その出し方をsmartyを使用してforeachで出しているのですが、 同じページでスライダーの所をクリックした時、 その画像を大画像の所(点字の[0])に持っていき、 サイトのURL自体も(画像取得のURLという意味ではなく、 http://hoge/photo/1.htmlとか、http://hoge/photo/2.html… という風に[id].htmlの様に)変えて表示させ、 残りの画像をスライダーの所に当てはめて スライダーの画像をも変えて延々と クリックできるようにしたいのです。 要約しますと、配列の組み換えをして、 クリックしたものを起点に[0]に当てはめる感じです。 何も思い付かず、また方法もわからないためここ数日 何をどうしていいのかわからないまま困惑した状態が続いています。 どのようにPHP、htmlを書けばいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • smarty foreach 半角スペース

    いつもお世話になっています。 phpより連想配列をsmartyにassignし、 smarty側でforeachで出力しているのですが、 要素間に無駄なスペースが混入します。 回避方法はあるのか教えて頂けないでしょうか。 [php] $arr = array('a' => 1, 'b' => 2); [smarty] {foreach from=$arr item=item} {item}: {/foreach} [出力] 1 : 2 ※本来1:2と出力させたい 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • プレインPHPでのSQL検索結果取得

    初心者の質問ですみません。 フレームワークをずうっと使って来たのですが、フレームワークを使わずに検索をしようとしたところ、全く思うようにいかず困っています。 SELECT * FROM table のような単純なSQL文なのですが、PEARを使って $sql = "SELECT * FROM table"; $result = $conn->query($sql); としvar_dumpしてみると、期待していたSQLのデータが表示されません。 フレームワークを使っていると、この時点でどのフレームワークでもきれいに連想配列で表示できていました。 その辺が、フレームワークのフレームワークたるゆえんなのでしょうか..... ただ、結果は取得できているようで、 $count = $result->numRows(); としてやると正しい件数が表示されますし、カラム名を指定して while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)){ echo $rs['column_name']; } としてやるとカラムの値を表示します。 やりたいこととしては、検索結果を連想配列で取得し、foreachで行ごとに処理を行うことで、whileで$rs['column_name']を取得できることから、最悪でも力技で行ごとにカラム情報を全て取得して配列を作ってやることはできるとは思うのですが、もっと良い方法が無いはずがないと思います。 教えていただけますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • smartyのforeachの使い方?

    smartyについて教えてください。 mysqlのデータを繰り返し表示させたいのですが Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26 とエラーが出てしまい動作しません。 foreachの使い方がおかしいのかと思いマニュアルをみてみたのですが わかりませんでした。 どうすれば繰り返し表示できるようになるでしょうか? ---php--- $i = 0; $list = array(); while ($col = mysql_fetch_array($res, MYSQL_ASSOC)) { $list[$i]['id'] = $col[id]; $list[$i]['title'] = $col[title]; $list[$i]['main'] = $col[main]; $i++; } $smarty->assign('list', $list); ---tpl--- {foreach item=list from=$list} <tr> <td>{$list.id}</td> <td>{$list.title}</td> <td>{$list.main}</td> <td><a href="hoge.php?id={$list.id}">a</a></td> <td><a href="hoges.php?id={$list.id}">a</a></td> </tr> {/foreach}

    • ベストアンサー
    • PHP
  • APIで検索結果を1件だけ取得する方法を教えてください

    日曜プログラマーのため、プログラミング知識が乏しいのですが質問させてください。 「Simple API」というサイトのWikipedia APIのサービスを利用しようと考えているのですが、 サイト上で紹介されているPHPサンプルですと、キーワードによっては複数件の結果を取得してしまいます。 --------以下サンプル------- <?php // キーワード指定 $keyword = "東京"; // APIのURL $url = "http://wikipedia.simpleapi.net/api?keyword=".urlencode($keyword)."&output=php"; // データを取得 $data = file_get_contents($url) ; // PHPシリアライズパーサーを利用して解析し、配列に入れる $array = unserialize($data); // 配列をforeachで表示するデモ print "<H1>Wikipedia情報</H1>"; foreach ($array as $key => $value) { print "<a href=\"".$value[url]."\"><strong>".$value[title]."</strong></a>\n<br/>". $value[body] ."<hr/>\n\n"; } ?> ------------------ 私のやりたいこととしては、検索キーワードに対して1件目の結果のみ表示させたいのですが、うまいやり方がわからず困っています。 (データ取得自体は1件のみでも複数件でも構わないのですが、表示は1件目のみさせたいです) どなたか1件目の結果のみ表示されるサンプルコードをご教授願えませんでしょうか。 よろしくお願いいたします。 【SimpleAPI vol.3 - Wikipedia API】 http://wikipedia.simpleapi.net/

    • ベストアンサー
    • PHP

専門家に質問してみよう