2014-09-30 4 views
2

Здравствуйте, у меня есть этот многомерный массив, который необходимо вставить в таблицу базы данных. До сих пор я придумал это решение, которое не работает полностью. У меня есть форма, которая поддерживает динамические поля для многих динамических полей. Я хочу сохранить эти динамически созданные поля, используя эту функцию. Сначала мне удалось создать цикл для форматирования данных. Я использовал этот цикл для форматирования данныхcodeigniter вставить многомерный массив в базу данных

 $url = str_replace(' ','-',strtolower($this->input->post('title'))); 
     $data = ['business' => [ 
           'title' => $this->input->post('title'), 
           'URL' => $url, 
           'category' => $this->input->post('category'), 
           'region' => $this->input->post('region') 
           ], 
       'description_' => [ 
           'text' => $this->input->post('description'), 
           ], 
       'logo_' => [ 
           'blob' => $this->input->post('logo'), 
           ]]; 
     $nyingi = [ 'location_' => ['text' => 'loc_txt','priority' => 'loc_order'], 
        'photo_' => ['path' => 'p_txt'], 
        'video_' => ['path' => 'v_txt'], 
        'product_' => ['p_id' => 'pt_q', 'text' => 'pt_txt', 'expire' => 'pt_xpr', 'title' => 'pt_tt'], 
        'service_' => ['p_id' => 'st_q', 'text' => 'st_txt', 'expire' => 'st_xpr', 'title' => 'st_tt'], 
        'hours_' => ['time1' => 't1', 'time2' => 't2', 'type' => 'tt'], 
        'map_' => ['text' => 'm_txt'] 
       ]; 
     foreach($nyingi as $ins => $vl){ 
      foreach($vl as $fld => $box){ 
       $uwazi = $this->input->post($box); 
       if(is_array($uwazi) && 1<count($uwazi)){ 
         foreach($uwazi as $bb){ 
          $one[$ins][$fld][] = $bb; 
         } 

       } elseif(is_array($uwazi) && 1==count($uwazi)) { 
        print_r($uwazi); 
       } 
      } 
     } 
     for($g=0;$g<count($one);$g++){ 
      for($h=0;$h<count($one[$g]);$h++){ 
       for($z=0;$z<count($one[$g][$h]);$z++){ 
        //if(array_key_exists($one[$g][$h+1], $one)){ 
         print $one[$g][$h][$z+1]; 
        //} 
       } 
      } 
     } 
     $data = array_merge($data, $one); 

Выход указанного выше кода

[location_] => Array 
    (
     [text] => Array 
      (
       [0] => Lemara Main Office 
       [1] => Themi branch 
       [2] => Sinoni branch 
      ) 
     [priority] => Array 
      (
       [0] => 1 
       [1] => 2 
       [2] => 3 
      ) 

    ) 

[photo_] => Array 
    (
     [path] => Array 
      (
       [0] => lemaraphoto.png 
       [1] => themiphoto.png 
       [2] => sinoniphoto.png 
      ) 
    ) 
[video_] => Array 
    (
     [path] => Array 
      (
       [0] => lemaravideo.mp4 
       [1] => themivideo.mp4 
       [2] => sinonivideo.mp4 
      ) 

    ) 

[product_] => Array 
    (
     [p_id] => Array 
      (
       [0] => product photo 
       [1] => product 3 photo 
       [2] => Product 2 photo 
      ) 
     [text] => Array 
      (
       [0] => product desc 
       [1] => product 3 desc 
       [2] => product 2 desc 
      ) 

     [expire] => Array 
      (
       [0] => product expire 
       [1] => product 3 expire 
       [2] => Product 2 expire 
      ) 
     [title] => Array 
      (
       [0] => product 
       [1] => Product 3 
       [2] => Product 2 
      ) 

    ) 

[service_] => Array 
    (
     [p_id] => Array 
      (
       [0] => Service 2 photo 
       [1] => service 3 photo 
       [2] => service photo 
      ) 
     [text] => Array 
      (
       [0] => service 2 desc 
       [1] => service 3 desc 
       [2] => service desc 
      ) 

     [expire] => Array 
      (
       [0] => Service 2 expire 
       [1] => service 3 expire 
       [2] => service expire 
      ) 
     [title] => Array 
      (
       [0] => Service 2 
       [1] => service 3 
       [2] => service 
      ) 

    ) 

) 

У меня эту функцию add_bz

function add_bz($data){ 
    $this->db->trans_start(); $er=0; 
    foreach($data as $table => $sql){ 
    if($table==="business"){ 
    $this->db->insert($table, $sql); 
    $id = $this->db->insert_id(); 
    } else { 
    array_merge($sql, array('idd' => $id)); 
    $this->db->insert($table, $sql);} 
    } 
    $this->db->trans_complete(); 
    if ($this->db->trans_status() === FALSE){print "Transaction Fails";return FALSE;} 
    return TRUE; 
} 

Эта функция позволяет мне вставить данные в этот формат только.

[[business] => Array 
    (
     [title] => Email Marketing 
     [URL] => email-marketing 
     [category] => 3 
     [region] => 2 
    ) 

[description_] => Array 
    (
     [text] => Some desc 
    ) 
[logo_] => Array 
    (
     [blob] => mainlogo.png 
    ) 
] 

как бизнес, decription_, logo_ являются таблиц БД, где заголовок, URL, категория, область, текст двоичных объектов БД столбцов в соответствующих таблицах, а остальные данные, что идет в этих колонках.

Как я хочу, чтобы он работал. Например, в location_

Я хочу массиву изменить в мой рабочий формат или что-то другое, что будет работать, как этот

location_ => ['text' => [[0] => 'Lemara Main Office'], 
       'priority' => [[0] => '1'] 
      ] 
location_ => ['text' => [[1] => 'Themi Office'], 
       'priority' => [[1] => '2'] 
      ] 
location_ => ['text' => [[2] => 'Sinoni Office'], 
       'priority' => [[2] => '3'] 
      ] 

или как этот

location_ => [0 => [['text' => 'Lemara Main Office'], 
        ['priority' => '1'] 
        ], 
      1 => [['text' => 'Themi Main Office'], 
        ['priority' => '2'] 
        ], 
      2 => [['text' => 'Sinoni Main Office'], 
        ['priority' => '3'] 
        ] 
      ], 

А также поддерживает множество столбцов не только два. Любая помощь глубоко оценена, поскольку я изо дня в день борется за эту работу. Заранее спасибо.

+0

ли Вы сделать поиск на этих fiels или вы хотите просто хранить и принимать его назад в frontend? – YahyaE

+0

'serialize()' может вам помочь – mrsrinivas

+0

Мне удалось решить его сложным способом. –

ответ

0

Я бы предложил вам преобразовать массив в строку JSON, а затем вставить его в DB в виде текста. JSON будет обрабатывать ваши многомерные данные так хорошо,

Чтобы преобразовать массив JSON: http://php.net/manual/en/function.json-encode.php Чтобы преобразовать JSON в массив: http://php.net/manual/en/function.json-decode.php

+0

JSON Я не думаю, что это была бы хорошая идея, как я давно решил проблему. Спасибо за это. –

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