Search code examples
phpcodeignitermultilingual

how can explode my array for multiple languages


This is my array:

Array ( [TR] => Array ( [name] => sayfa adı [description] =>
sayfa icerigi

[slug] => sayfa linki ) [EN] => Array ( [name_en] => page name [description_en] =>
page information

[slug_en] => page link ) [DE] => Array ( [name_de] => seite name [description_de] =>
seite informationen

[slug_de] => seite link ) )

this is my codeigniter insert code:

$_INS = array(
            'lang_id' => '?',
            'name' => '?',
            'description' => '?',
            'slug' => '?',
            'page_id' => $insert_id,
            'adding' => $adding,
            'updated_at' => date('Y-m-d H:i:s'),
            'created_at' => date('Y-m-d H:i:s')
        ); 

and I want to add every array into the DB with a new line


Solution

  • Simple nested foreach with a key modifier to remove the underscore and a batch insert should work:

    <?php
    
    
    $array = array(
    
        'TR' => array (
    
            'name' => 'stmtA_1',
            'description' => 'stmtA_2',
            'slug' => 'stmtA_3',
    
        ),
    
        'EN' => array(
    
            'name_en' => 'stmtB_1',
            'description_en' => 'stmtB_2',
            'slug_en' => 'stmtB_3',
    
        ),
    
    
    );
    
    $insert_id = null;
    $adding = null;
    
    $i = 0;
    
    $data = array();
    
    foreach ($array as $lang => $values) {
    
        $data[$i] = array(
            'page_id' => $insert_id,
            'adding' => $adding,
            'updated_at' => date('Y-m-d H:i:s'),
            'created_at' => date('Y-m-d H:i:s'),
            'lang_id' => $lang
        );
    
        foreach ($values as $identifier => $value) {
    
            $key = explode('_', $identifier)[0];
    
            $data[$i][$key] = $value;
    
        }
    
        $i++;
    
    }
    
    echo '<pre>';
    print_r($data);
    
    $this->db->insert_batch('my_table', $data);