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

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

ただいまの
回答率

90.49%

  • PHP

    20781questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • アルゴリズム

    420questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

配列のループ操作(php)

解決済

回答 3

投稿 編集

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

退会済みユーザー

配列のある一部の配列を別の配列に格納するようにしたいです。

$table_data = array("a1","a2","a3",
                    "b1","b2","b3",
                    "c1","c2","c3");

$table_data_inputter = array("a","b","c");

配列$table_dataにあるa1,a2,a3とb1,b2,b3とc1,c2,c3を、配列$table_data_inputterのa、b、cにそれぞれ格納したいです。

確認したこと

$table_data = array("a1","a2","a3",
                    "b1","b2","b3",
                    "c1","c2","c3",
                    "d1","d2","d3");

$table_data_inputter = array("a","b","c");

    for ($i=0; $i < count($table_data); $i++) {
                //$table_data_inputter[0]にa1,a2,a3を格納する場合
        if($i >= 0 && $i <= 2){
            $table_data_inputter[0] = $table_data[$i];
             echo $table_data_inputter[0];
        }
                //$table_data_inputter[1]にb1,b2,b3を格納する場合
        if($i >= 3 && $i <= 5){
            $table_data_inputter[1] = $table_data[$i];
            echo $table_data_inputter[1];
        }
                //$table_data_inputter[2]にc1,c2,c3を格納する場合
        if($i >= 6 && $i <= 8){
            $table_data_inputter[2] = $table_data[$i];
            echo $table_data_inputter[2];
        }
    }

上記はループ分でif文を使ったやり方です。これの何が行けないかというと、例えば$table_dataの配列にd1,d2,d3を追加した時に応用が聞かないです。言い換えてみれば$table_dataに追加したd1,d2,d3を$table_data_inputterのdに追加するのにまた上記のようにif文を追加しないといけなくなります。

どなたか、応用が聞くやり方があればご教授お願いします。

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+2

コードと説明を読んでですが、「$table_dataを3つずつ区分したい」、ということで間違いないでしょうか(違ったらご指摘ください)。

そうだとすると、ちょうどぴったりなarray_chunkという関数があります(リファレンス)。

$table_data = array("a1","a2","a3",
                    "b1","b2","b3",
                    "c1","c2","c3",
                    "d1","d2","d3");

$table_data_inputter = array_chunk($table_data, 3);

// 配列の中身:(PHP 5.4の角カッコ記法で)
[ ["a1","a2","a3"], ["b1","b2","b3"], ["c1","c2","c3"], ["d1","d2","d3"] ]

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/05/13 15:14

    ご回答大変うれしいです。まさに私がしたかったことです。
    便利な関数?があるんですね!大変参考になりました。
    ありがとうございます。

    キャンセル

0

要求にあってるかはわかりませんが、作ってみました。

$table_data = array("a1","a2","a3",
                    "b1","b2","b3",
                    "c1","c2","c3",
                    "d1","d2","d3");

$table_data_inputter = array();

for ($i=0; $i < count($table_data); $i++) {
    $table_data_inputter[ord($table_data[$i]{0}) - ord('a')][] = $table_data[$i];
}
var_dump($table_data_inputter);


結果

array(4) {
  [0]=>
  array(3) {
    [0]=>
    string(2) "a1"
    [1]=>
    string(2) "a2"
    [2]=>
    string(2) "a3"
  }
  [1]=>
  array(3) {
    [0]=>
    string(2) "b1"
    [1]=>
    string(2) "b2"
    [2]=>
    string(2) "b3"
  }
  [2]=>
  array(3) {
    [0]=>
    string(2) "c1"
    [1]=>
    string(2) "c2"
    [2]=>
    string(2) "c3"
  }
  [3]=>
  array(3) {
    [0]=>
    string(2) "d1"
    [1]=>
    string(2) "d2"
    [2]=>
    string(2) "d3"
  }
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/05/13 15:30

    ご回答ありがとうございます。大変興味深い考え方ですね。
    サイトで調べたところordは、文字を文字コードに変換するString関数で間違えないですか?

    for文にあるコードが少し理解できなかったみたいです。
    私の解釈としては、$table_data_inputterの最後と最初の文字を引いて、$table_dataの結果を代入しているのではないかと考えています。
    …多分違うかと思いますが、できればもう少し詳しく教えていただければ、嬉しいです。

    キャンセル

  • 2016/05/13 16:03

    C言語チックなコードを書いてみました。
    解説します。
    ordについてはその通りです。
    >ord($table_data[$i]{0})
    $table_data[$i]の1文字目のASCIIコードを求めています。
    "a1"でしたら、'a'のASCIIコード(0x61=D'97)
    そしてそのASCIIコードから同じく'a'のASCIIコードを減算し、格納すべき配列の要素位置を求めています。
    "a1"の場合、97-97=0 になります。
    "b1"の場合、98-97=1。

    こうすることでデータの順番がバラバラでも目的の位置に入るようにしたのですが、そこまでやる必要はなかったようですね。

    キャンセル

  • 2016/05/13 17:34

    なるほど!大変関心しました。求めたもの以上でした。
    そんなこともできるんですね。これなら配列の文字がバラバラでも位置をASCIIで特定してくれるんですね。そんなやり方があったなんて知らなかったです。
    ご回答本当に有難うございます。

    キャンセル

0

こんにちは。

対象となる配列に対して希望するもので分けていきたいって認識でおkですか?
しかし、増えるたびにif文で増やしたくないみたいな

a1,a2.....f4とかまで増えてく可能性があるような。

var list = ['a1','a2','a3','b1','b2','b3','c1','c2','c3','d1','d2','d3'];//対象となる配列
        var inlist = {'a':[],'b':[],'c':[]};//入れ分けしたい箱
        var objkey = Object.keys(inlist);
        for(var w = 0 ; w < objkey.length ; w++){
            console.log(objkey[w]);
            for(var i= 0 ; i < list.length ; i++){
                if(list[i].indexOf(objkey[w]) != -1){
                    inlist[objkey[w]].push(list[i]);
                }
            }
            console.log(inlist[objkey[w]]);
        }

objectの連想配列で作ってそこに判別したい文字入れて。
あとはどんどん詰め込んでいくみたいな感じですかね?

解決されたようでよかったです。。。しかもちがった><

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/05/13 15:54

    ご回答大変嬉しいです。やりたいことは同じです。
    console.logについて気になったのですが、alertの場合は表示されましたが、のconsole.logはブラウザ上で表示されないのですか?

    キャンセル

  • 2016/05/13 16:11

    こんにちは。
    はい。ブラウザ上では表示されません。
    お使いのブラウザでF12を押下してもらうと開発者モード(デベロッパーツール。。などなど)が開かれるのでそこの画面に表示がされます。(consoleタブ内に。)

    http://www.buildinsider.net/web/chromedevtools/01
    http://shim0mura.hatenadiary.jp/entry/20111231/1325357395
    chromeをお使いならこちらの記事など参考になるかと思います。


    キャンセル

  • 2016/05/13 17:30

    なるほど!!納得しました。
    URLまで載せていただいて、本当に有難うございます。

    キャンセル

関連した質問

  • 解決済

    PHPを用いた記号の入力制限

    PHPで入力された記号を受け取り、キーコードに変換するコードを作成しています。 変換後にjsで実際の入力制限をかけるのですが、どうにも冗長なコードになってしまっています。 何か

  • 解決済

    配列の結果を名前にしたい

    下記のような配列を作成し配列の結果を名前にしたいのですが PHPで記述方法(文法)をおおしえねがえますでしょうか。 $array = array ( 'a' => 1,

  • 解決済

    予定表の作成(グラフ?)

    上記はExcelで作成している、○○さんの一週間の訪問予定表の一部です。 画像だけでいくと、例えば○○さんの28日(日)の9:00~10:00に××会社に訪問予定!と

  • 解決済

    for

    前提・実現したいこと 初めまして。今、私は友人からPHPを教わっています。 その友人から出された宿題に関して分からないことが起きてしまったため質問させていただきます。 出され

  • 解決済

    今月と来月のカレンダーの処理をfor文で回すには

    初心者です。下記for文を書いてみたのですが、当月は出来ても翌月のはできませんでした。 どなたか教えて頂けますでしょうか。 $tsuki = '月'; $list

  • 解決済

    縦型のカレンダーを出力したい PHP

    最終的には画像のように送信ボタンを押したら、選択年月が曜日と合わせて テーブルで出力されるカレンダーを作りたいのですが、 月初の曜日を月末まで連続して出力する処理の書き方がわか

  • 解決済

    PHP 非表示の状態からプルダウンメニューで選択し、 内容を表示させたい

    画像1 ⬇️  ⬇️  ⬇️  ⬇️ 画像2 画像1.画像2のように非表示の状態からプルダウンメニューで選択し、 javascriptは使用せず内容を表示させたいの

  • 解決済

    PHPでDBから読み出したデータを、HTMLの表(table)出力するスマートな方法

    前提・実現したいこと 要約すると「DBから取得した配列データを加工・集計して使いたいが、何度もループで回したり再度配列に入れ直して処理するのは避けたい」 PHPでDBから読

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

  • PHP

    20781questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • アルゴリズム

    420questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。