PHP Сделать многомерный массив из столбцов одной строки mysql? - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть следующая строка mysql db.

id | user_id | title_1|desc_1|link_1|title_2|desc_2|link_2| 

и т. Д. До 10

из этой одной строки я хочу удалить id и идентификатор пользователя и получить результирующий многомерный массив.

главная проблема - это итерация по ассоциативному массиву, который возвращается моим запросом, и разбиение его на массивы 3.

Array = (

 [0] = array (
    [tite_1] => 'sometitle'
    [desc_1] => 'description'
    [link_1] => 'a link'
 )
  [1] = array (
    [tite_2] => 'sometitle'
    [desc_2] => 'description'
    [link_2] => 'a link'
 )

и так далее, как мне этого добиться Ятупик? !!

Ответы [ 3 ]

3 голосов
/ 09 декабря 2011

Возможно, вы захотите структурировать вашу таблицу в две таблицы, подобные этой:

parent(id, user_id, more_fields, whatever_you_need_here)

child(parent_id, title, desc, link)

Теперь вам будет очень легко получить данные, которые вы хотите иметь.* Конечно, parent и child должны быть названы соответствующим образом, например, user и links.

2 голосов
/ 09 декабря 2011

Реальным решением здесь является исправление базы данных для нормализации этих столбцов в другие таблицы. Однако, если вы не можете исправить свою базу данных, этот код сделает эту работу:

// $output will hold your full result set
$output = array();
while ($row = mysql_fetch_assoc($result)) {
  // For each row returned, add a new array to $output
  $output[] = array(
    // The new array consists of 10 sub-arrays with the correct
    // keys and values
    array (
      "title"=>$row['title1'],
      "desc"=>$row['desc1'],
      "link"=>$row['link1']
    ),
    array (
      "title"=>$row['title2'],
      "desc"=>$row['desc2'],
      "link"=>$row['link2']
    ),
    ...,
    ...,
    array (
      "title"=>$row['title10'],
      "desc"=>$row['desc10'],
      "link"=>$row['link10']
    )
  );
}
2 голосов
/ 09 декабря 2011

Правильный ответ - изменить базу данных, чтобы использовать третью обычную форму. Вероятно, вам следует все бросить и прочитать о нормализации базы данных, прежде чем делать что-либо еще.

Правильный дизайн будет выглядеть примерно так:

 CREATE TABLE user_has_links (
   id INT PRIMARY KEY,
   user_id INT,
   title TEXT,
   description TEXT,
   link TEXT
 )

Чтобы сохранить несколько ссылок на пользователя, вы просто создадите новую строку в этой таблице для каждой ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...