2016-04-11 2 views
0

У меня есть два набора данных, которые находятся в двух разных массивах, и мне нужно объединить их в группы, а затем вставить результаты в мою базу данных.Объедините два неравномерных массива и вставьте в базу данных

// name values 
$arr=['Ram','joy','Rahul','Monty']; 
// values that need to be split between names 
$code=['10','11','12','13','14','15','16','17','18','19','20','21']; 

В приведенном выше виде у меня есть два набора данных. $arr содержит name и $code содержит цифру code.

Здесь мне нужно вставить код для имени в таблицу в соответствии с пользовательским вводом. Предположим, что $userinput=2 первый код 2 будет вставляться для имени Ram в две строки, затем второй второй будет вставляться для имени joy и т. Д., И если $userinput=3 будет вставляться соответствующим образом. Мой ожидаемый результат для $userinput=3 приведен ниже.

_________________ 
id name code 
---+--------+----- 
1 | Ram | 10 
---+--------+----- 
2 | Ram | 11 
---+--------+----- 
3 | Ram | 12 
---+--------+----- 
4 | Joy | 13 
---+--------+----- 
5 | Joy | 14 
---+--------+----- 
6 | Joy | 15 
---+--------+----- 
7 | Rahul | 16 
---+--------+----- 
8 | Rahul | 17 
---+--------+----- 
9 | Rahul | 18 
---+--------+----- 
10 | Monty | 19 
---+--------+----- 
11 | Monty | 20 
---+--------+----- 
12 | Monty | 21 
---+--------+----- 

Пожалуйста, помогите решить эту проблему.

+1

это может быть достигнуто с помощью вложенных циклов. .. что там у вас пробовал? –

+0

Я пробовал что-то, но он входил только в 2 строки. – satya

+0

Выполните некоторую математику, чтобы разделить '$ code' на' $ arr', возможно, введите 'ceil()', затем цикл, возможно, сбросить значение автоинкремента здесь и там ... но я согласен с @SamTengWong, вы должен показать вашу попытку. – Rasclatt

ответ

0

здесь это ...

Я надеюсь, что это поможет вам ... Я не на моем ноутбуке, так это то, что я мог бы сделать ..

<?php 

    $user_input = 3; // this should be your user input. 
    $arr=['Ram','joy','Rahul','Monty']; 
    $codes=['10','11','12','13','14','15','16','17','18','19','20','21']; 
    $counter1=0; //counter for your $codes to continue. 
    foreach($arr as $name){ 
     $counter = 0; //counter for your condition... 
     for($x=0; $x <= count($codes); $x++){ 
      $counter++; 
      if($counter <= $user_input){ 
       echo "INSERT INTO sampletable (`name`, `code`) VALUES ($name, $codes[$counter1])"."<br />"; 
      }else{ 
       break; 
      } 
      $counter1++; 
     } 
    } 
+0

Я попытаюсь сообщить и. – satya

+0

@satya sure .... Я не смог выполнить код .. так как я не на своем ноутбуке. –

+0

Нет проблем, я сообщу u. – satya

0

Я думаю, что это то, что вы ищете, предполагая, что вы используете PDO в качестве своего соединения с DataBase.

for ($i = 0; $i <= count($code); $i++) { 
    $db->query("INSERT INTO db_code (name, code) VALUES ('{$arr[$i]}', '{$code[$i]}'"); 
} 

Конечно, если вы не настроили функцию $db или handler, просто добавьте:

$db = new PDO("mysql:host=DATABASE_HOST;dbname=DATBASE_NAME", DATABSE_USERNAME, DATABASE_PASSWORD); 

И для большинства пользователей, host = localhost, name = your databse to enter to, username = root, password = nothing.

Если вы хотите получить больше информации о PDO, см here

+0

Что вы сделали. Пожалуйста, снова проверьте мой пост. – satya

+0

Вы не пытаетесь вставить несколько строк? @satya – Jek

+0

для такого же имени, я могу вставить mupltiple код в соответствии с userinput. – satya

-1

Попробуйте это:

 $arr = ['Ram', 'joy', 'Rahul', 'Monty']; 
     $code = ['10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21']; 
     $userInput = 3; 
     $new_code = array_chunk($code, $userInput); 
     $final = array_combine($arr, $new_code); 
     foreach ($final as $name => $code_array) { 
      echo "INSERT INTO sampletable (`name`, `code`) VALUES ($name, $code_array[0]]), ($name, $code_array[1]]), ($name, $code_array[2]])" . "<br />"; 
     } 
+0

Good One. @Amit Visodiya – RJParikh

+0

просто для его динамического, как $ userInput = 3; $ new_code = array_chunk ($ code, $ userInput); @Sam Teng Wong – RJParikh

+0

Спасибо @Ruchish Parikh –

1

Другой Я попытался ответ быть низкий.

$arr1=['Ram','joy','Rahul','Monty']; 
$code1=['10','11','12','13','14','15','16','17','18','19','20','21']; 
$userInput = 3; 
$index = 0; 
for($i=0;$i<count($arr1);$i++) 
{ 
    $count = 0; 
    echo $arr1[$i]."<br>"; 
    for($j=0;$j<count($code1);$j++) 
    { 
     if($count != $userInput) 
     { 
      $key = $j+$index; 
      if(array_key_exists($key,$code1)) 
      { 
       //echo $code1[$j+$index]."<br>"; 
       echo "INSERT INTO sampletable (`name`, `code`) VALUES (".$arr1[$i].", ".$code1[$key].")" . "<br />"; 
       $count++; 
      } 
     } 
     else 
     { 
      $index += $userInput; 
      break; 
     } 
    } 
} 

Выход

Ram 
INSERT INTO sampletable (`name`, `code`) VALUES (Ram, 10) 
INSERT INTO sampletable (`name`, `code`) VALUES (Ram, 11) 
INSERT INTO sampletable (`name`, `code`) VALUES (Ram, 12) 
joy 
INSERT INTO sampletable (`name`, `code`) VALUES (joy, 13) 
INSERT INTO sampletable (`name`, `code`) VALUES (joy, 14) 
INSERT INTO sampletable (`name`, `code`) VALUES (joy, 15) 
Rahul 
INSERT INTO sampletable (`name`, `code`) VALUES (Rahul, 16) 
INSERT INTO sampletable (`name`, `code`) VALUES (Rahul, 17) 
INSERT INTO sampletable (`name`, `code`) VALUES (Rahul, 18) 
Monty 
INSERT INTO sampletable (`name`, `code`) VALUES (Monty, 19) 
INSERT INTO sampletable (`name`, `code`) VALUES (Monty, 20) 
INSERT INTO sampletable (`name`, `code`) VALUES (Monty, 21) 
0

Вот один-SQL решение заявление:

$arr = array('Ram','joy','Rahul','Monty'); 
$code = array('10','11','12','13','14','15','16','17','18','19','20','21'); 

function qAssemble($arr,$code) 
    { 
     $split = array_chunk($code,ceil((count($code)/count($arr)))); 
     $new = array(); 
     foreach($arr as $k=>$name) { 
      $b  = array_filter($split[$k]); 
      $a  = array_fill(0,count($b),$name); 
      $new = array_merge($new,array_map(function($v) use ($name) 
       { 
        return "('{$name}','{$v}')"; 
       },$b)); 
     } 

     return implode(',',$new); 
    } 

$str = "insert into `db_code` (`name`, `code`) VALUES ".qAssemble($arr,$code); 

print_r($str); 

Дает:

insert into `db_code` (`name`, `code`) VALUES ('Ram','10'),('Ram','11'),('Ram','12'),('joy','13'),('joy','14'),('joy','15'),('Rahul','16'),('Rahul','17'),('Rahul','18'),('Monty','19'),('Monty','20'),('Monty','21') 
Смежные вопросы