Codeigniter多维数组插入数据库


Codeigniter multidimensional array insert into database

你好,我正在尝试使用codeigniter将多维数组插入到mysql中。我在正确输入值时遇到了一些问题。以下是多维数组的外观

Array ( [2] => Array ( [A] => FName 2 [B] => LName 2 [C] => PhoneNo 2 [D] => FaxNo 2 ) [3] => Array ( [A] => FName 3 [B] => LName 3 [C] => PhoneNo 3 [D] => FaxNo 3 ) [4] => Array ( [A] => FName 4 [B] => LName 4 [C] => PhoneNo 4 [D] => FaxNo 4 ) [5] => Array ( [A] => FName 5 [B] => LName 5 [C] => PhoneNo 5 [D] => FaxNo 5 ) [6] => Array ( [A] => FName 6 [B] => LName 6 [C] => PhoneNo 6 [D] => FaxNo 6 ) [7] => Array ( [A] => FName 7 [B] => LName 7 [C] => PhoneNo 7 [D] => FaxNo 7 ) [8] => Array ( [A] => FName 8 [B] => LName 8 [C] => PhoneNo 8 [D] => FaxNo 8 ) [9] => Array ( [A] => FName 9 [B] => LName 9 [C] => PhoneNo 9 [D] => FaxNo 9 ) ) 

以下是我尝试做的

function insertfiles($arr_data)
{
    foreach ($arr_data as $value) {
        foreach($value as $key => $a){
            $data = array(
                   'Firstname' => $a,
                   'Lastname' => $a,
                   'Phone'=>$a,
                   'Fax' =>$a
                );
                $this->db->insert('test', $data); 
        }
    }
}

我确信我把这件事搞砸了,它把值插入数据库,但它按照的方式插入

因为它不允许我上传图片,我提供了一个在线查看图片的链接。http://psadatadesign.com/img/test-bmp.jpg

任何帮助都将不胜感激。当我试图弄清楚我做错了什么。

使用这个函数,而不是您自己的

function insertfiles($arr_data)
{
    foreach($array_data as $a){
        $data = array(
               'Firstname' => $a['A'],
               'Lastname' => $a['B'],
               'Phone'=>$a['C'],
               'Fax' =>$a['D']
            );
            $this->db->insert('test', $data); 
    }
}

对于情况1 ,有两种情况

如果您传递的数组不包含命名密钥,请检查下面的函数

$table_array_index_key = array( //if your array does not have a named key.
    0 => array( //first row
        0 => 'first_name 1',
        1 => 'last_name 1',
        2 => 'phone 1',
        3 => 'fax 1'
        ),
    1 => array( //second row
        0 => 'first_name 2',
        1 => 'last_name 2',
        2 => 'phone 2',
        3 => 'fax 2'
        ),
    );
$row = array();
$columns = array();
for($x=0;$x<count($table_array_index_key);$x++){
        $row = array(
            'Firstname' => $table_array_index_key[$x][0], //$table_array[1][0] means table_array row 2 column 1  
            'Lastname' => $table_array_index_key[$x][1],
            'Phone' =>  $table_array_index_key[$x][2],
            'Fax' => $table_array_index_key[$x][3] 
        );
        array_push($columns,$row);
        $rows = array();
}
echo "<pre>";
print_r($columns);

否则,如果您的数组包含命名键,请检查此项。

$table_array_index_name = array( //if your array have a named key.
    0 => array( //first row
        'A' => 'first_name 1',
        'B' => 'last_name 1',
        'C' => 'phone 1',
        'D' => 'fax 1'
        ),
    1 => array( //second row
        'A' => 'first_name 2',
        'B' => 'last_name 2',
        'C' => 'phone 2',
        'D' => 'fax 2'
        ),
    );
$rows = array();
$columns = array();
$arrayNames = array('A','B','C','D'); 
for($x=0;$x<count($table_array_index_name);$x++){
        $row = array(
            'Firstname' => $table_array_index_name[$x][$arrayNames[0]], //note $arrayNames[0] = A
            'Lastname' => $table_array_index_name[$x][$arrayNames[1]],
            'Phone' =>  $table_array_index_name[$x][$arrayNames[2]],
            'Fax' => $table_array_index_name[$x][$arrayNames[3]] 
        );
        array_push($columns,$row);
        $rows = array();
}
echo "<pre>";
print_r($columns);

你可以像下面这样循环:

$table_array_index_name = array( //if your array have a named key.
    0 => array( //first row
        'A' => 'first_name 1',
        'B' => 'last_name 1',
        'C' => 'phone 1',
        'D' => 'fax 1'
        ),
    1 => array( //second row
        'A' => 'first_name 2',
        'B' => 'last_name 2',
        'C' => 'phone 2',
        'D' => 'fax 2'
        ),
    );
$rows = array();
$columns = array();
$arrayNames = array('A','B','C','D');
$dbFieldName = array('Firstname','Lastname','Phone','Fax');
for($x=0;$x<count($table_array_index_name);$x++){
    for($y=0;$y<count($arrayNames);$y++){
        $row[$dbFieldName[$y]] = $table_array_index_name[$x][$arrayNames[$y]];
    }
        array_push($columns,$row);
        $rows = array();
}
echo "<pre>";
print_r($columns);

它将返回以下数据:

Array
(
    [0] => Array
        (
            [Firstname] => first_name 1
            [Lastname] => last_name 1
            [Phone] => phone 1
            [Fax] => fax 1
        )
    [1] => Array
        (
            [Firstname] => first_name 2
            [Lastname] => last_name 2
            [Phone] => phone 2
            [Fax] => fax 2
        )
)

就我个人而言,我更喜欢for循环,因为我们在操作数组时可以有更多的自由度和控制权。

对于$this->db->insert_batch函数,请查看代码点火器活动记录文档:https://ellislab.com/codeigniter/user-guide/database/active_record.html