0

2 次元の php 配列を理解するのに問題があります。私のデータベースには、URL を格納するテーブルがあり、1 対 N の関係でタグを格納する別のテーブルに関連付けられています。テーブルは次のようになります。

URL         
ID    --->  URL_ID
            ID
            TAG

この構造を取得してPHPクラスに保存しようとしていますが、理解できないので

class Url extends databaseobject{

    $list = [

        "url" =>,
        "tags" => []


    ];
                                }

データベースを格納するための正しい構造を構築するのを手伝ってくれる人はいますか?

4

3 に答える 3

1

こんな感じになります

   db_url            db_tags
id urlidurl_idタグ
 | --------------------- |
class UrlTags
{
    public $url_id;
    public $url;
    public $tags = array();
}

したがって、URLのリストを対応するタグとともに保存する必要がある場合。

$url_tags = new UrlTags();

$url_tags->$id = 1;
$url_tags->$url = 'http://www.example.com';
$url_tags->$tags[0] = 'zero';
$url_tags->$tags[1] = 'one';
$url_tags->$tags[2] = 'two';

またははるかに多くのオブジェクト指向スタイルで:

class Url
{
    public $url_id;
    public $url;
    public $tags = array();
}

class Tags
{
    public $tag_id;
    public $tag_name;
}

$url_list = new Url();

$url_list->$id = 1;
$url_list->$url = 'http://www.example.com';

$tag = new Tags();
$tag->$tag_id = 1;
$tag->$tag_name = 'one';

//Now store the tags
$url_list->$tags[0] = $tag;

$tag = new Tags();
$tag->$tag_id = 2;
$tag->$tag_name = 'two';

$url_list->$tags[1] = $tag;
于 2013-02-15T05:04:56.383 に答える
0

2 つのテーブルが結合された結果セットを反復処理していると仮定すると、結果セットの各行は次のようになります。

url, url_id, tag, tag_id

また、使用しているアダプターが何らかの反復可能な結果セットを作成すると仮定すると、反復すると (これは、使用しているアダプターを知らなくても疑似コードのようなものです):

$list = array();
while($arr = $your_adapter's_current_row){
    if(empty($list[$arr[$url_id]]) {
        $list = array(
            'URL_ID' => $url_id,
            'URL' => $url,  
            'TAGS' => array()
        }
        $list[$arr[$url_id]]['TAGS'][$tag_id] = $tag;
}

その後、配列をクラスのプロパティとして追加できます。

于 2013-02-15T05:08:45.073 に答える
0

ここに構造があります

$list  = array(
          1 => array(
            'URL_ID' => 1
            'ID' => 1
            'TAG' => 'hiiiii'
          ),  
          2 => array(
            'URL_ID' => 1
            'ID' => 2
            'TAG' => 'hello'
          ),
       ); 
于 2013-02-15T04:09:53.510 に答える