За последние 24 часа нас посетили 21824 программиста и 1078 роботов. Сейчас ищут 697 программистов ...

Вставка данных в БД многомерный массив

Тема в разделе "PHP и базы данных", создана пользователем 4akHopic, 18 май 2019.

Метки:
  1. 4akHopic

    4akHopic Новичок

    С нами с:
    21 мар 2019
    Сообщения:
    46
    Симпатии:
    1
    Есть массив
    PHP:
    1. $fruits = [['name' => 'apple', 'colour' => 'green', 'calories' => 100], ['name' => 'banans', 'colour' => 'yellow', 'calories' => 11150]];
    Код который записывает этот массив в БД
    PHP:
    1. $pdo->beginTransaction();
    2.  
    3. /* Вставка множества записей по принципу "все или ничего" */
    4. $sql = 'INSERT INTO fruit
    5.    (name, colour, calories)
    6.    VALUES (?, ?, ?)';
    7.  
    8. $sth = $pdo->prepare($sql);
    9.  
    10. foreach ($fruits as $fruit) {
    11.     $sth->execute([
    12.         $fruit['name'],
    13.         $fruit['colour'],
    14.         $fruit['calories'],
    15.     ]);
    16. }
    17.  
    18. /* Фиксация изменений */
    19. $pdo->commit();
    Здесь все работает.

    как записать массив такого вида?
    PHP:
    1. $fruits = [[[['name' => 'apple', 'colour' => 'green', 'calories' => 100], ['name' => 'banans', 'colour' => 'yellow', 'calories' => 150]],[['name' => 'ground', 'colour' => 'black', 'calories' => 200], ['name' => 'orange', 'colour' => 'colour_orange', 'calories' => 20]]]];
     
  2. 4akHopic

    4akHopic Новичок

    С нами с:
    21 мар 2019
    Сообщения:
    46
    Симпатии:
    1
    Разобрался
    С помощью цыкла for
    PHP:
    1. for($i = 0; count($fruits) > $i; $i ++){
    2. foreach ($fruits as $fruit) {
    3.   $sth->execute([
    4.   $fruit['name'],
    5.   $fruit['colour'],
    6.   $fruit['calories'],
    7.   ]);
    8. }
    9. }
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @4akHopic
    PHP:
    1. <?php
    2.  
    3. $fruits = [[[['name' => 'apple', 'colour' => 'green', 'calories' => 100], ['name' => 'banans', 'colour' => 'yellow', 'calories' => 150]],[['name' => 'ground', 'colour' => 'black', 'calories' => 200], ['name' => 'orange', 'colour' => 'colour_orange', 'calories' => 20]]]];
    4.  
    5. foreach($fruits[0] as $fruit){
    6.  
    7.   foreach($fruit as $item){
    8.     $sth->execute([
    9.       $fruit['name'],
    10.       $fruit['colour'],
    11.       $fruit['calories'],
    12.     ]);
    13.   }
    14. }
    15. ?>
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    в моей обвертке такая фича предусмотрена. Когда нужно массовый insert сделать

    PHP:
    1. <?php
    2.  
    3. use Aero\Supports\Lerma AS DB;
    4.  
    5. /* ... */
    6.  
    7. $array = [
    8. [ 'a', 1, 2 ],
    9. [ 'b', 3, 4 ]
    10. ];
    11.  
    12. DB :: prepare( 'INSERT INTO `table`( `name`, `column2`, `column3` ) VALUES ( ?,?,? )', $array );