За последние 24 часа нас посетили 22722 программиста и 1271 робот. Сейчас ищут 820 программистов ...

Вопрос о соединений массива с ключами в строку.

Тема в разделе "PHP для новичков", создана пользователем Artur_hopf, 21 июн 2019.

  1. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Добрый день. Есть вот такой код, который соединяет массив в строку:
    PHP:
    1. $insert = "INSERT INTO  database (
    2.           [OID]
    3.          ,[Date]
    4.          ,[Day]
    5.          ,[Product]
    6.          ,[Spec]
    7.          ,[ProductPlan]
    8.          ,[Socket]
    9.          ,[ProductCycle]
    10.          ,[Shift]
    11.          ,[Characteristic]
    12.          ,[Ingredient]
    13.          ,[ProductWeight]
    14.          ,[ExtraCharacteristic]
    15.          ,[Packing]
    16.          ,[status]
    17.          ,[orderliness]
    18.          ,[articul]
    19.          ,[transitionTime]
    20.          ,[directum]
    21.      ) VALUES ";
    22.  
    23. //тут некоторые условия, в одном из условий происходит цикл массива:
    24.  
    25. foreach($array as $key => $item){
    26.     if($key !== 0){
    27.           $insert .= ", ";
    28.       }
    29.  
    30.       $insert .= "(
    31.          ".sqlNull($item['OID']).",
    32.          ".sqlNull($item['Date']).",
    33.          ".sqlNull($item['Day']).",
    34.          ".sqlNull($item['Product']).",
    35.          ".sqlNull($item['Spec']).",
    36.          ".sqlNull($item['ProductPlan']).",
    37.          ".sqlNull($item['Socket']).",
    38.          ".sqlNull($item['ProductCycle']).",
    39.          ".sqlNull($item['Shift']).",
    40.          ".sqlNull($item['Characteristic']).",
    41.          ".sqlNull($item['Ingredient']).",
    42.          ".sqlNull($item['ProductWeight']).",
    43.          ".sqlNull($item['ExtraCharacteristic']).",
    44.          ".sqlNull($item['Packing']).",
    45.          ".sqlNull($item['status']).",
    46.          ".sqlNull($item['orderliness']).",
    47.          ".sqlNull($item['articul']).",
    48.          ".sqlNull($item['transitionTime']).",
    49.          ".sqlNull($item['directum'])."
    50.       )";
    51. }
    52.  
    53. function sqlNull($item){
    54.  
    55.    if(is_null($item)){
    56.        $result = 'NULL';
    57.     }else{
    58.        $result = "'".$item."'";
    59.      }
    60.     return $result;
    61. }
    Так вот вопрос, с учетом того что ключи массива совпадают с именами, можно ли упростить это все до пары строк.
    Например знаю что у js есть такая функция для работы с объектами:
    Код (Javascript):
    1. var obj = {a:1, b:2, c:3};
    2.  
    3. for (var prop in obj) {
    4.   console.log("obj." + prop + " = " + obj[prop]);
    5. }
    Может и тут можно что то такое сделать, пройтись циклом по $item?
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    разобрался, результат тот же, только проверку на null надо еще сделать, чтоб в базу писалась не пустая строка, а NULL. Есть идеи? :)
    PHP:
    1. $insert  = "INSERT INTO database ";
    2. foreach($array as $key => $item){
    3.      if($key === 0){
    4.          $insert .= " ([".implode("],[", array_keys($item))."]) VALUES ";
    5.      }else{
    6.          $insert .= " ,";
    7.      }
    8.  
    9.       $insert .= "('".implode("', '", $item)."')";
    10. }
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    array_map
     
    askanim нравится это.
  4. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Это не функция, как и это:
    PHP:
    1. $obj = ['a'=>1, 'b'=>2, 'c'=>3];
    2. foreach ($obj as $k => $v) {
    3.   echo "obj." . $k . " = " . $v;
    4. }
    Трудно конечно когда за деревьями лес не видно ;)
     
  5. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405