добавить один элемент в многомерный массив

#php #arrays #multidimensional-array

#php #массивы #многомерный-массив

Вопрос:

у меня есть не сложный вопрос, но я не смог найти ответ.

У меня есть многомерный массив для вставки данных одним запросом. Результат таков:

 INSERT INTO table (field1, field2, field3, field4) values ('1', '2', '3'),('1', '2', '3'),('1', '2', '3'),('1', '2', '3')
 

и я хочу добавить одно значение в каждый кортеж следующим образом:

 INSERT INTO table (field1, field2, field3, field4) values ('1', '2', '3','10'),('1', '2', '3','10'),('1', '2', '3','10'),('1', '2', '3','10')
 

Это код (я также пробовал использовать array_push внутри foreach):

 $DataArr = array();
    for($i=1;$i<5;$i  ){
        $fieldVal1 = 1;
        $fieldVal2 = 2;
        $fieldVal3 = 3;
 
        $DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')";
    }
$id=10;
$new=array();

foreach ($DataArr as $value) {
    $value[4]="'$id'";
}

$sql = "INSERT INTO table (field1, field2, field3) values ";
    $sql .= implode(',', $DataArr);
print_r($sql);
 

Я протестировал этот код, но он не работает, кто-нибудь может мне помочь?

Комментарии:

1. Простая функция php. Использование array_push($your_variable)

2. @RobinSingh Я попробовал с array_push($value,»‘$id'»); но не работает

3. Пожалуйста, покажите вашу структуру массива

Ответ №1:

 Here is the easy solution

    $DataArr = array();
    for($i=1;$i<5;$i  ){
        $fieldVal1 = 1;
        $fieldVal2 = 2;
        $fieldVal3 = 3;
        $DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')";
    }
    $id=10;
    $new=array();
    foreach ($DataArr as $key =>$value) {
        $tmpVal = ltrim($value,"(");
        $tmpVal = rtrim($tmpVal,")");
    
        $tmpArray = explode(',',$tmpVal);
        array_push($tmpArray,'4');
    
        array_push($new, "(".implode(',',$tmpArray).")");
         
    }
    
    
    $sql = "INSERT INTO table (field1, field2, field3, field4) values ";
    $sql .= implode(',', $new);
    print_r($sql);
 

Ответ №2:

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

 $DataArr = array();
for($i = 0; $i < 4; $i  ) {
  $DataArr[$i] = "1,2,3";
}

$field1_arr = !empty($DataArr[0]) ? implode(",", $DataArr[0]) : "";
$field2_arr .= !empty($DataArr[1]) ? implode(",", $DataArr[1]) : "";
$field3_arr .= !empty($DataArr[2]) ? implode(",", $DataArr[2]) : "";
$field4_arr .= !empty($DataArr[3]) ? implode(",", $DataArr[3]) : "";;

$sql = $connection->prepare("INSERT INTO table (field1, field2, field3, field4) VALUES (?,?,?,?)");
$sql->bind_param("ssss", $field1_arr, $field2_arr, $field3_arr, $field4_arr);
if($sql->execute()) {
  // It worked
}
$sql->close();
 

Комментарии:

1. по сути, я хочу вставить массив с помощью одной вставки, а не выполнять множество запросов с помощью foreach . Я думал о создании this this dataarr, который содержит 3 из 4 значений, но я должен добавить последний атрибут и выполнить вставку в с помощью mysqli.