2013-02-15 3 views
0

У меня возникли проблемы с пониманием двухмерных php-массивов, В моей базе данных у меня есть таблица, в которой хранятся URL-адреса, она связана с другой таблицей, в которой хранятся теги соотношением от 1 до N, таблицы выглядят как это:Структура массива PHP-SQL

URL   
ID ---> URL_ID 
      ID 
      TAG 

Я пытаюсь принести эту структуру и сохранить его в классе PHP, но я не понимаю,

class Url extends databaseobject{ 

    $list = [ 

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


    ]; 
           } 

Может кто-то помочь мне построить правильную структуру для хранения моей базы данных ?

ответ

0

здесь структура

$list = array(
      1 => array(
      'URL_ID' => 1 
      'ID' => 1 
      'TAG' => 'hiiiii' 
     ), 
      2 => array(
      'URL_ID' => 1 
      'ID' => 2 
      'TAG' => 'hello' 
     ), 
     ); 
+0

каждый URL имеет несколько тегов, означает ли это, tag => также будет массивом? Мне нужно заполнить его динамически после запроса mysql –

+0

Я думаю, что ответ $ list является массивом всех записей тега со ссылкой на тот URL, к которому он принадлежит. Я предполагаю, что будет второй массив, $ URL_List = массив (1 => "http: // someUrl", 2 => "http: // someOtherUrl") ... – AndrewP

1

Это должно быть что-то вроде этого

 
    db_url   db_tags 
id url   id url_id tag 
|---------------------| 
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; 
0

Предполагая, что вы являются итерация результирующего набора, в котором соединяются две таблицы, так что каждая строка в наборе результатов выглядит как это:

url, url_id, tag, tag_id 

также при условии, что любой адаптер вы используете создает какой-то iteratable набор результатов, то, как вы Итера тэ (это своего рода псевдо-Codey, не зная, что адаптер вы используете):

$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; 
} 

Вы можете добавить массив как свойство вашего класса.

Смежные вопросы