0

私はまだ、db クエリの結果をモデルからコントローラーに戻し、最後にビューに渡すことに頭を悩ませています。データを適切な場所に取得しているようですが、ビュー内の結果のオブジェクトの配列に最もよくアクセスする方法がわかりません。

具体的には、誰かがリンクを送信した最新の 7 つの異なる日付をデータベースに照会しようとしています。日付の配列を取得し、それらの日付ごとに、その日付に送信されたすべてのリンクに対してクエリを実行し、結果を配列に格納します。次に、ビューで、それらの個別の日付ごとにヘッダー (日付) を表示し、その直後にそれに関連付けられたリンクを表示します。

私の個別の日付クエリ ($link_headers) からの配列:

Array (
    [0] => stdClass Object([added_date] => 2011-08-11)
    [1] => stdClass Object([added_date] => 2011-05-03)
    [2] => stdClass Object([added_date] => 2011-04-21)
    [3] => stdClass Object([added_date] => 2011-04-10)
    [4] => stdClass Object([added_date] => 2011-03-04)
    [5] => stdClass Object([added_date] => 2011-02-28)
    [6] => stdClass Object([added_date] => 2011-02-22)

)

送信された実際のリンクのクエリから得られる配列 ($links_result):

Array
(
    [0] => Array
        (
            [0] => stdClass Object
                (
                    [user_id] => 2
                    [link_id] => 1178
                    [link_url] => http://www.amazon.com/Silicone-Rubber-CASSETTE-Design-IPHONE/dp/B004YDJWOY
                    [link_name] => Silicone Skin BLACK CASSETTE TAPE
                    [link_notes] => iPhone case... probably won't fit in my dock.
                    [added_date] => 2011-08-11
                    [flag_new] => 1
                    [rating] => 4
                    [public] => 1
                )

        )

    [1] => Array
        (
            [0] => stdClass Object
                (
                    [user_id] => 2
                    [link_id] => 1177
                    [link_url] => http://snorby.org/
                    [link_name] => Snorby - Snort front-end
                    [link_notes] => 
                    [added_date] => 2011-05-03
                    [flag_new] => 1
                    [rating] => 4
                    [public] => 1
                )

        )

    [2] => Array
        (
            [0] => stdClass Object
                (
                    [user_id] => 2
                    [link_id] => 1176
                    [link_url] => http://www.nytimes.com/2011/04/17/business/17excerpt.html?_r=4&pagewanted=1&ref=business
                    [link_name] => Corner Office - The 5 Habits of Highly Effective C.E.O.s
                    [link_notes] => Sounds a lot like what Nathanial said...
                    [added_date] => 2011-04-21
                    [flag_new] => 1
                    [rating] => 4
                    [public] => 1
                )

        )

    [3] => Array
        (
            [0] => stdClass Object
                (
                    [user_id] => 2
                    [link_id] => 1175
                    [link_url] => http://chezlarsson.com/myblog/2010/06/panduro-concrete-challenge-3.html
                    [link_name] => Concrete book-ends
                    [link_notes] => Cool look... 
                    [added_date] => 2011-04-10
                    [flag_new] => 1
                    [rating] => 4
                    [public] => 1
                )

            [1] => stdClass Object
                (
                    [user_id] => 2
                    [link_id] => 1174
                    [link_url] => http://themeforest.net/item/reciprocity-photo-blog-gallery/154590
                    [link_name] => Site Templates - Reciprocity - Photo Blog
                    [link_notes] => 
                    [added_date] => 2011-04-10
                    [flag_new] => 1
                    [rating] => 5
                    [public] => 1
                )

        )

    [4] => Array
        (
            [0] => stdClass Object
                (
                    [user_id] => 2
                    [link_id] => 1173
                    [link_url] => http://lifehacker.com/#!5771943/the-always-up+to+date-guide-to-jailbreaking-your-ios-device
                    [link_name] => The Always Up-to-Date Guide to Jailbreaking Your iOS Device
                    [link_notes] => 
                    [added_date] => 2011-03-04
                    [flag_new] => 1
                    [rating] => 4
                    [public] => 1
                )

        )

    [5] => Array
        (
            [0] => stdClass Object
                (
                    [user_id] => 2
                    [link_id] => 1172
                    [link_url] => http://lifehacker.com/#!5754463/how-to-jailbreak-your-ios-421-device
                    [link_name] => How to Jailbreak Your iOS 4.2.1 Device
                    [link_notes] => 
                    [added_date] => 2011-02-28
                    [flag_new] => 1
                    [rating] => 4
                    [public] => 1
                )

        )

    [6] => Array
        (
            [0] => stdClass Object
                (
                    [user_id] => 2
                    [link_id] => 1171
                    [link_url] => http://www.bitplumber.net/2010/10/a-cassandra-hardware-stack-dell-c1100s-ocz-vertex-2-ssds-with-sandforce-arista-7048s/
                    [link_name] => A Cassandra Hardware Stack
                    [link_notes] => 
                    [added_date] => 2011-02-22
                    [flag_new] => 1
                    [rating] => 3
                    [public] => 1
                )

        )

)

...すべて問題ないようです。しかし、私の問題は、上記のように HTML を作成しようとしている私の見解にあります。私が作業しようとしているコードの簡略図は次のとおりです。

foreach ($link_headers as $header) {

echo "INDEX: ". $links_headers .", ADDED DATE: ". $header->added_date ."<BR>";

    foreach ($links_result[$link_headers] as $result){
        echo $result->added_date ."<BR>";
        echo $result->link_name ."<BR><BR>";
    }
}

したがって、最初の配列のインデックスを使用して、foreach ループに 2 番目の配列のどのインデックスをループしてコンテンツを取得するかを伝えようとしています。明らかに $links_result[$link_headers] 変数を誤用していますが、何をしようとしているのかを示すために残しました。

どんな助けでも大歓迎です!

マイケル

4

1 に答える 1

0

私は CodeIgniter を使用しませんが、フレームワーク内または PHP からのいずれであっても、一度にすべてを取得するだけで、インデックスの問題は意味がなくなります。

SELECT * FROM model_table mt WHERE mt.added_date IN (
   SELECT DISTINCT md.added_date from model_table md
   ORDER BY md.added_date DESC
   LIMIT 7
) ORDER BY mt.added_date DESC

これにより、最新の 7 つの日付に制限された日付順に並べられたモデルの配列が得られます。したがって、ヘッダーをいつ表示するかを選択するだけの問題です。

$current = null;
foreach($links as $link) {
   if($link->added_date !== $current) {
      // show the header and set current to the current date
      $current = $link->added_date;
      echo 'HEADER: Added on ' . $current . '<br />';
   }

   echo $row->added_date ."<BR>";
   echo $row->link_name ."<BR><BR>";
}
于 2013-03-14T19:45:22.617 に答える