2017-06-10 4 views
1

Ich versuche, diese Daten in der Datenbank zu speichern, aber ich bekomme Fehler. Wie behebt man das?CodeIgniter multidimensionales Array speichern in Mysql-Datenbank einzelne Spalte

Ich möchte einfach mehrdimensionale Array in einer einzigen Spalte speichern.

$data = array(
      '2017' => array(
       '6' => array(
        '10' => array(
         'count' => 76 
        ), 
       ), 
      ), 
     ); 

$getdata = $this->view_count->setView($data); 

Modell

public function setView($data) 
    { 
     $setData = $this->db->where('short', 'honwl')->update('ci_links', $data['view_count']); 
     return $setData; 
    } 

Fehler, die ich Ein PHP-Fehler sind immer aufgetreten

Schweregrade: Hinweis

Nachricht: Undefined index: view_count

Dateiname: models/View_count.php

Zeilennummer: 14

Backtrace:

Datei: C: \ wamp \ www \ Blog \ application \ models \ View_count.php Line: 14 Funktion: _error_handler

Datei: C: \ wamp \ www \ Blog \ application \ Controller \ Dashbord.php Line: 52 Funktion: setView

Datei: C: \ wamp \ www \ Blog \ index.php Line: 315 Funktion: require_once

Ein Datenbankfehler aufgetreten

Sie müssen die "set" Methode verwenden, um einen Eintrag zu aktualisieren.

Dateiname: C: /wamp/www/blog/system/database/DB_query_builder.php

Zeilennummer: 1864

Antwort

0

Als Nachricht sagt, Sie haben keine Schlüssel $data['view_count'] aber Sie haben $data[2017][6][10]['count'] Wert . Ich nehme an, dass diese Daten dynamisch geändert werden, so dass Sie den Wert des inneren Arrays mit dem Schlüssel count erhalten müssen. Wenn Ihr Array immer ähnliche Schlüssel hat, d. H. $data[year][month][day][count], können Sie Code (Bit geändert) von this answer verwenden, um diesen Schlüsselwert zu erhalten.Setzen Sie in Ihrem Modell

private function getCount($arr, $search) 
{ 
    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 
    foreach($iterator as $key => $value) { 
     if($search == $key && $value !== '') { 
      return $value; 
     } 
    } 
    return false; 
} 

Dann in Ihrer ersten Einsatz Wertmethode durch diese Funktion gefiltert:

public function setView($data) 
{ 
    $count = $this->getCount($data, 'count'); 

    if ($count !== false) { 
     $setData = $this->db->where('short', 'honwl')->update('ci_links', $count); 
     return $setData; 
    } 
    return false; 
} 
+0

$ data = array ( \t \t \t '2017' => array ( \t \t \t \t '6' \t => array ( \t \t \t \t \t '10' => array ( \t \t \t \t \t \t 'zählen' \t => 76 \t \t \t \t \t) \t \t \t \t \t '11' => array ( \t \t \t \t \t \t 'count' \t => 42 \t \t \t \t \t), \t \t \t \t \t '15' => array ( \t \t \t \t \t \t 'count' \t => 23 \t \t \t \t \t), \t \t \t \t), \t \t \t), \t \t); Ich möchte einfach mehrdimensionale Array in einer einzigen Spalte speichern. –

+0

Scheint ich antwortete auf ["Y" Teil des Problems] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem#answer-66378)? – Tpojka

0

Nach Ihnen Beispiel-Code, Sie Array-Daten zu JSON für das Speichern von bis Spalte kodieren können, dann erhalten zurück durch Decodierung:

Controller:

$data = array(
      '2017' => array(
       '6' => array(
        '10' => array(
         'count' => 76 
        ), 
       ), 
      ), 
     ); 

$getdata = $this->view_count->setView($data); 
$data = $this->view_count->getView(); 
Modell

:

public function setView($data) 
{ 
    $data = json_encode($data); 
    $setData = $this->db->where('short', 'honwl')->update('ci_links', array('column_name'=>$data)); 
    return $setData; 
} 

public function getView($data) 
{ 
    $row = $this->db->where('short', 'honwl')->get('ci_links')->row(); 
    return json_decode($row->column_name, true); 
} 

Die column_name hängt von Ihrer Tabelle Spaltennamen, der die Array-Daten speichern.