как сделать из вот таких данных ассоциативный массив?

Kood-Good

Новичок
как сделать из вот таких данных ассоциативный массив?

поломал всю голову, не могу придумать как сделать массив.

в общем есть такие данные в таблице:

1) компьютеры/комплектующие/мат.плты
2) компьютеры/комплектующие/звуковые карты
3) мобильники/сименс
4) компьютеры/комплектующие/мат.плты/pc –partner

стоит задача на основе этих данных сделать ассоциативный массив. есть какие-нибудь идейки?
 

baev

‹°°¬•
Команда форума
Хм.

1. Свой пример ассоциативного массива приведите.
Любого.

2. С данными этими Вы чего потом делать собираетесь?
 

vadim

Guest
Kood-Good
явно напрашивается многоуровневый массив
 

Hugo Borz

Новичок
Re: как сделать из вот таких данных ассоциативный массив?

Автор оригинала: Kood-Good
поломал всю голову, не могу придумать как сделать массив.

в общем есть такие данные в таблице:

1)компьютеры/комплектующие/мат.плты
2)компьютеры/комплектующие/звуковые карты
3)мобильники/сименс
4)компьютеры/комплектующие/мат.плты/pc –partner

стоит задача на основе этих данных сделать ассоциативный массив. есть какие-нибудь идейки?
Если я правильно понял то «компьютеры/комплектующие/мат.плты» это элементы массива, если да то можно прописать так $comp["comp"]["based"]["mather"]
 

Kood-Good

Новичок
компьютеры/комплектующие/мат.плты - это строка в базе данных, которая действительно должна стать массивом, а в совокупности строки должны образовать многоуровневый (причем кол-во уровней не задано, зависит от длины строки) массив. ну если так проводить аналогию, то напоминает файловое древо:папка [компьютеры], в ней папка [комплектующие], в ней 2 папки - [мат платы] и [звуковые карты] ну и т.д.
Hugo Borz, ну да, в действительности что-то такое, но единого алгоритма придумать не получается :(

-~{}~ 22.03.06 04:13:

baev
1) array('a'=>array('b'=>'hello'))
2) наболевший вопрос. надо сделать дерево такое, визуально, каждый элемент - ссылка. если допусти нажать в моем примере на "комлектующие" в этом дереве - получим дерево поменьше. вот такая головоломка
 

magic

lancer
стоит задача на основе этих данных сделать ассоциативный массив
Может быть неправильно поставлена задача?

Если это нужно для хранения в БД, то обычно делают дерево категорий/продуктов, а не ассоциативный массив. Вывод и использование тоже эелементарно делается.

Простите, я просто не могу понять - зачем такие сложности?
 

baev

‹°°¬•
Команда форума
компьютеры/комплектующие/мат.плты - это строка в базе данных
Как оно в таком виде в базу попало?
Я это к тому, что Вы наверняка эту строку «из кусочков» по некому алгоритму собирали. А теперь Вам всё нужно обратно вернуть.
Зачем двойную работу делать?

надо сделать дерево такое, визуально
Вот теперь понятно. А то массив из строки через 'explode' элементарно получается, только Вам-то такой массив не нужен...

Вообще, из того, что у Вас сейчас, массив сделать можно, конечно, только очень нудно: делать в цикле что-то вроде:

PHP:
list($massiv[$i]['level_1'], $massiv[$i]['level_2'], $massiv[$i]['level_3'], $massiv[$i]['level_4']) =
   split("/", $string, 4);
а потом перебором в цикле полученные массивы группировать по совпадаюшим «левелам»

Только, опять же, нужно ли?..
 

Kood-Good

Новичок
baev, взял вашу идею за основу. после операции list имеем массив:
PHP:
Array ( [0] => Array ( [level_1] => компьютеры ) [1] => Array ( [level_1] => Бытовая техника ) [2] => Array ( [level_1] => компьютеры [level_2] => комплектующие ) [3] => Array ( [level_1] => компьютеры [level_2] => комплектующие [level_3] => звук ) [4] => Array ( [level_1] => Строительная техника ) [5] => Array ( [level_1] => компьютеры [level_2] => разное ) [7] => Array ( [level_1] => Бытовая техника [level_2] => уз печь ) )
далее попытался использовать такой скрипт:

PHP:
 for ($i=0;$i<count($massiv);$i++){
   $lev1=$massiv[$i]['level_1'];
   for ($p=0;$p<count($massiv[$i]);$p++){
      $slev1=$massiv[$p]['level_1'];
     if (($slev1==$lev1)&&($p!=$i)){array_merge($massiv[$p],$massiv[$i]);}
   ;}
 
 ;}
скрипт ничего в массиве не изменил. как правильно проводить слияние?
 

Нечто

Психолог РНРClub
PHP:
$items = array(
  'компьютеры/комплектующие/мат.плты',
  'компьютеры/комплектующие/звуковые карты',
  'мобильники/сименс',
  'компьютеры/комплектующие/мат.плты/pc –partner',
);

$result = array();
foreach ($items as $item) {
  $path = explode('/', $item);
  $pointer =& $result;
  foreach ($path as $elem) {
    if (!isset($pointer[$elem])) $pointer[$elem] = array();
    $pointer =& $pointer[$elem];
  }
}

print_r($result);
 
Сверху