0

いくつかの背景。PubMed XML ファイルから派生した 2 つの MySQL テーブルがあります。pubauth テーブルには特定の参照のすべての作成者が含まれ、pubmed テーブルには一意の pubmed 情報がすべて含まれます。公開されたレコードごとに n+1 人の著者がいます。私が必要だと思うのはこれです:

Array(
    [id]=> Array([id]=>1
        [PMID]=>123456
        Array(
            [pubauth]=>Array(
                [pubauth_id]=>1
                [LastName]=>Chen
            )
        )
    )
)

私のモデルは次のとおりです。

$this->db->select( 'pubmed.id, PMID,  pubauth.id AS pubauth_id, LastName');
$this->db->from( 'pubmed' );
$this->db->join( 'pubauth', 'pubmed_id = pubmed.id', 'left outer' );        
$this->db->where( 'idecm',$keyword );
$query = $this->db->get();
$temp_result = array();
foreach ( $query->result_array() as $row ){
    $temp_result[] = array(
           'pubmed_id' => $row['id'],
           'PMID'      => $row['PMID'],
           'LastName'  => $row['LastName'],
           'pubauth_id'=> $row['pubauth_id']
   );
}

これにより、各行が $temp_result の配列として返されます。私が狙っているのは、この質問に似ています: PHP MYSQL multidimensional array . 答えに従ってモデルの foreach を置き換えると、次のようになります。

foreach ( $query->result_array() as $row )
{
     $r_array[$row["id"]]=array();

     $row_st = (string) $row["pubauth_id"];
     $r_array[$row["id"]][] = $row_st;
}

foreach ($r_array as $id => & $data) {
// Start with just ID
$newarray = array(
  "id" => $id
);

if (count($data) == TRUE)
  $newarray["pubauth_id"] = & $data;

$finalarray[] = & $newarray;
print_r( $finalarray);
unset($newarray);
}

これから取得するこの配列は

Array ( [0] => Array ( [id] => 1 [pubauth_id] => Array ( [0] => 7 ) ) ) Array ( [0] => Array ( [id] => 1 [pubauth_id] => Array ( [0] => 7 ) ) [1] => Array ( [id] => 2 [pubauth_id] => Array ( [0] => 17 ) ) )

データは最後の行のみであり、LastName が欠落しています。とりとめのないことで申し訳ありませんが、これは私を困惑させました。私は 2D 配列を扱うことができますが、これについて頭を悩ませているようには見えません。ビューで撮影している出力は、PubMed リファレンスのように見えます。Author1...Author_n、タイトル、データ、ジャーナル、巻、号、ページ。今取得できるのは、各著者のタイトル、データ、ジャーナル、巻、号、ページだけです。どんな助けでも大歓迎です。

4

2 に答える 2

0

今必要な結果が得られます。DBクエリを1つだけ使用する方法が思いつかないので、これが最も効率的な方法かどうかはまだわかりません。Smarty テンプレートを少し変更する必要がありました。

    <table class="table table-striped"> 
 <tbody>
        {foreach $data as $apub}
            <tr>
                <td >
                    {assign var = "title" value = '. '|cat:$apub['ArticleTitle']|cat:' ('|cat:$apub['PubDate']|cat:') '|cat:$apub['Title']|cat:'. '|cat:$apub['Volume']|cat:'('|cat:$apub['Issue']|cat:')'|cat:$apub['MedlinePgn'] }

                    {foreach $apub['authors'] as $apeople}
                        {assign var = "sauthors" value = ''}
                        {if $apub["id"] == $apeople["pubmed_id"]}
                            {assign var = "authors" value = ' '|cat:$apeople['LastName']|cat:' '|cat:$apeople['Initials'] scope="global"}
                            {$authors}
                        {/if}
                    {/foreach}
                    {$title}
                </td>
{/tr}

これは Author1 ... AuthorN タイトル 年 ジャーナル ボリューム 号 ページを表示します。

于 2013-09-11T14:43:48.093 に答える