質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.80%

DBからデータの取得

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,421
退会済みユーザー

退会済みユーザー

DBから特定のフィールドから特定のフィールドまでの値の取得方法が分からずご質問させて頂きました。

DBから一行取得すると
$stmt = $pdo->prepare("SELECT * FROM table WHERE id=$id");
$stmt -> execute();
print_r($result);
Array ( [id] => 0 [number] => 1000 [name] => データ [hoge_1] => 1 [hoge_1_r] => 13 [hoge_1_balls] => 1638 [hoge_1_avg] => 15.365 [hoge_2] => 2 [hoge_2_r] => 15 [hoge_2_balls] => 1890 [hoge_2_avg] => 3.136 [hoge_3] => 3 [hoge_3_r] => 16 [hoge_3_balls] => 2016 [hoge_3_avg] => 81.499 [hoge_4] => 0 [hoge_4_r] => 0 [hoge_4_balls] => 0 [hoge_4_avg] => 0 [hoge_5] => 0 [hoge_5_r] => 0 [hoge_5_balls] => 0 [hoge_5_avg] => 0 )

このようにデータを取得しています。

ここから、フィールド名が「hoge_1,hoge_2,hoge_3」の値を新しい配列($hogeNum)として格納していきたいです。
ただし、hoge_4やhoge_5には値が0なので0の値を持つフィールドは除外します。(他の行ではhoge_4に値がある場合もあるため)

同様に、「hoge_1_r,hoge_2_r,hoge_3_r」の値も新しい配列($hogeR)として格納したいです。

最終的に
print_r($hogeNum); //hoge_1,hoge_2,hoge_3」の値を新しい配列($hogeNum)
//[0] => 1 [1] => 2  [2] => 3

print_r($hogeR); //「hoge_1_r,hoge_2_r,hoge_3_r」の値
//[0] => 13 [1] => 15  [2] => 16 

このような形にしたいと思っております。

DBから一行取得した後からどのような手法で最終的なところまで持っていくのか教えていただきたいです。
こういう考え方でやったほうがいいよ、などアドバイスがあればお願いいたします。

宜しくお願い致します。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こういうことでしょうか?

前提として、配列のキー'hoge_数字'の数字部分は1から始まる連番である、としています。

そうでない場合、このコードはうまく動きません。

$result = array(
    'id' => 0, 'number' => 1000, 'name' => 'データ',

    'hoge_1' => 1, 'hoge_1_r' => 13, 'hoge_1_balls' => 1638, 'hoge_1_avg' => 15.365,
    'hoge_2' => 2, 'hoge_2_r' => 15, 'hoge_2_balls' => 1890, 'hoge_2_avg' => 3.136 ,
    'hoge_3' => 3, 'hoge_3_r' => 16, 'hoge_3_balls' => 2016, 'hoge_3_avg' => 81.499,
    'hoge_4' => 0, 'hoge_4_r' => 0 , 'hoge_4_balls' => 0   , 'hoge_4_avg' => 0 ,
    'hoge_5' => 0, 'hoge_5_r' => 0 , 'hoge_5_balls' => 0   , 'hoge_5_avg' => 0 ,
);


$hogeNum = array();
$hogeR = array();
$hogeBalls = array();
$hogeAvg = array();

$i = 1;
while (array_key_exists('hoge_' . $i, $result)) {

    $num = $result['hoge_' . $i];
    if ($num > 0) {
        $hogeNum[] = $num;
        $hogeR[] = $result['hoge_' . $i . '_r'];
        $hogeBalls[] = $result['hoge_' . $i . '_balls'];
        $hogeAvg[] = $result['hoge_' . $i . '_avg'];
    }

    $i++;
}

print_r($hogeNum);
print_r($hogeR);
print_r($hogeBalls);
print_r($hogeAvg);

実行結果
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
Array
(
    [0] => 13
    [1] => 15
    [2] => 16
)
Array
(
    [0] => 1638
    [1] => 1890
    [2] => 2016
)
Array
(
    [0] => 15.365
    [1] => 3.136
    [2] => 81.499
)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/24 21:27

    回答ありがとうございます!
    連番ですので思うように出来ました!

    連結でそのようなループ処理ができるんですね!
    勉強になりました!引き続き頑張ります!

    キャンセル

  • 2015/10/24 21:38

    posukee様

    お役に立てたようで幸いです。
    ぜひ、頑張って下さい。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る