プロが教える店舗&オフィスのセキュリティ対策術

独学で始めたphpでつまづいて困っています。
phpで配列に入れた値をキーを数字で直接取ることは出来るのですが、変数で取ると意味不明な値が入ってきて困っています。
教えて頂けると助かります。よろしくお願いします。

print_r($ary['header']['h']);

Array ( [0] => 組織1, [1] => 2, [2] => 3, [3] => 組織名, [4] => 倉庫C, [5] => サブC, [6] => 倉庫名, [7] => 売上金額,n [8] => 消費税,n [9] => 粗利額,n )

print $ary['header']['h'][9]
とすると
粗利額,n
が返ります。

この状態で、下記のようなループで配列を取り出すとき、
$cnt=odbc_num_fields($rst);
for ($i=1; $i<=$cnt; $i++) {
$val = odbc_result($rst,$i);
print $i."-->".$ary['header']['h'][$i];
print "<br>";
(中略)
}

0-->組織1,
1-->2,
2-->3,
3-->組織名,
4-->倉庫C,
5-->サブC,
6-->倉庫名,
7-->売上金額,n
8-->消費税,n
9-->4307131

のように、なってしまいます。
キーの指定の仕方がおかしいのでしょうか?

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

  • 補足します。
    大変お恥ずかしいのですが、ODBC関数を使った後に配列が壊れることばかり目が行ってしまって、その後に使っている変数名が、それ以前に使っている変数 $valと被っていました。

    foreach ($ary['header']['h'] as &$val){
    $cols = split(",",$val);
    print "<td class=h>{$cols[0]}</td>\n";
    }

    ここでは一時的に配列に分割するのに使うだけの変数なので、被っても問題は無いと思うのですが、同じ変数に上書きした結果、配列自体も壊れてしまうようです。なぜなのかは良く判りませんが、この部分を別の変数に変えたら正常に動作しました。

    $fld = odbc_result($rst,$i);

      補足日時:2016/08/01 11:01

A 回答 (1件)

ちょっとおかしくない?


> for ($i=1; $i<=$cnt; $i++)
なので$iは1から回しているのに
出力は
> 0-->組織1,
と、0から出力されています。
何かへんなやっていませんか?

odbc_関数を利用していますが、とりあえず使わないで
デバッグした上で仕様通りに動いてからodbc接続してみてください
    • good
    • 0
この回答へのお礼

有難うございました。
ソースを省略修正しているうちに、修正箇所を間違えました。
正しくは 配列をマイナスしています。失礼しました。

$cnt=odbc_num_fields($rst);
for ($i=1; $i<=$cnt; $i++) {
$val = odbc_result($rst,$i);
$ii=$i-1;
print $ii."-->".$ary['header']['h'][$ii];
print "<br>";
(中略)
}

odbc関数部分を省略して、
$ary = parse_ini_file("test.ini", true);
print_r($ary['header']['h']);
for ($i=1; $i<=10; $i++) {
$ii= $i-1;
print $ii."-->".$ary['header']['h'][$ii];
print "<br>";
}
としたところ、
Array ( [0] => 組織1, [1] => 2, [2] => 3, [3] => 組織名, [4] => 倉庫C, [5] => サブC, [6] => 倉庫名, [7] => 売上金額,n [8] => 消費税,n [9] => 粗利額,n )
(略)
9-->粗利額,n
と正常に出ることは確認しました。
odbc関数を使った後、配列の最後にODBC関数で取得したSQLの最終列が入ってしまうんですね。

お礼日時:2016/08/01 09:16

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