За последние 24 часа нас посетили 59206 программистов и 1837 роботов. Сейчас ищут 829 программистов ...

Задачка с ячейками csv и массивами.

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

  1. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    Всем привет.
    Утомило, может что-то не доганяю, нужна помошь.

    И так , я делаю выгрузку значений товарв в csv при этом каждая строка новый многомерный массив. Потом в итоге сохраняется все верно.


    Поступила задача, добавить перечень полей свойств из базы, соотвественно длина перой строки увеличилась, т.к. кроме основных полей, нарпимер Название и Айди товара, добавился ВЕС, РОСТ, ЦВЕТ и так далее. Количество полей зависит от количества свойств, допустим их 50.

    После формирования первой строки, я создаю массив, в котором ЗНАЧЕНИЯ (айди значений) этих свойств забиты в массив.

    Позже при выборке товара нужно сделать проверку, если товар 1 содержит значение АЙДИ 3355, то поставить в этом поле единичку.

    Как сделать грамотно проверку ячеек, если они не просто общий массив должны искать, а перебирать значения в соответсвии с ячейкой. Т.е. например если ячейка имеет значние СИНИЙ, и она 45-ая в списке (столбец) то получается я делаю перебор всех полей Foreach

    PHP:
    1. $pti=0;
    2.                   while($pti <= $count_total_colums){
    3.                   $pti++;

    $count_total_colums - количество этих доп полей


    $product_types_value_title_array_id[0] - строока номер ноль в ней массив значений, наример СИНИЙ значит = 3355, и так далее.
    $valuebox_arr - список всех свойств товра, например "3355,3677,5544"

    Ниже пробую найти значение соотвествие, но что-то не идет

    PHP:
    1. if(count($product_types_value_title_array_id[0]) > 0){
    2.                   foreach($product_types_value_title_array_id[0] as $b=>$bi) {
    3.                    
    4.                        if (in_array($product_types_value_title_array_id[0][$b], $valuebox_arr[$pti])) {
    5.                          $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'1'.$end_sybmol;
    6.                        } else { //if (in_array($product_types_value_title_array_id[$csv_file_arrayfputs_ident][$b], $valuebox_arr[$pti])) {
    7.                          $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'--'.$end_sybmol;
    8.                        }; //if (in_array($product_types_value_title_array_id[$csv_file_arrayfputs_ident][$b], $valuebox_arr[$pti])) {
    9.                    
    10.                   }; //foreach($product_types_value_title_array_id[$csv_file_arrayfputs_ident] as $b=>$bi) {
    11.                   } else {  $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'-'.$end_sybmol; }; //if(count($product_types_value_title_array_id[$csv_file_arrayfputs_ident]) > 0){*/
     
    #1 social_project, 13 июл 2017
    Последнее редактирование модератором: 13 июл 2017
  2. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Функция array_map() не подойдет?
    И гораздо красноречивей был бы дамп массива.
     
    #2 Maputo, 13 июл 2017
    Последнее редактирование: 13 июл 2017
  3. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    Получается, я вынужден прогонять сначала цикл, количества последующих ячеек, что бы заполнять их, и если есть совпадение то выводить 1, а если нет , то пустоту. Чую посадит сервак это дело... Нагрузка, массив и цикл внутри цикла.. ,Пробую пока


    PHP:
    1. $pti=0;
    2.                   while($pti <= $count_total_colums){
    3.                   $pti++;
    4.        
    5.                
    6.                   echo '<br>$valuebox_arr[$pti] - '.$valuebox_arr[$pti].''; - это увидеть значения у товара
    7.  
    8.                   if (in_array($product_types_value_title_array_id[$csv_file_arrayfputs_ident], $valuebox_arr[$pti])) {
    9.                     $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'1'.$end_sybmol;
    10.                   } else { //if (in_array($product_types_value_title_array_id[$pti], $valuebox_arr)) {
    11.                     $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.''.$end_sybmol;
    12.                   }; //} else { //if (in_array($product_types_value_title_array_id[$pti], $valuebox_arr)) {*/
     
    #3 social_project, 13 июл 2017
    Последнее редактирование модератором: 13 июл 2017
  4. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Перевод:
    Есть трехмерный массив $products:
    1 - пустое измерение;
    2 - товары;
    3 - идентификаторы свойств товаров

    Есть одномерный массив $valuebox_arr, который хранит идентификаторы всех возможных свойств товара

    Надо заполнить двумерный массив $csv:
    1 - $csv_file_arrayfputs_ident (х.з. от куда это берется, похоже на идентификатор товара)
    2 - наличие свойства у товара ( 1 или -- ). //Размер массива такой же как и у $valuebox_arr

    Вопросы:
    @social_project, как формируется 1-й массив? Нельзя ли эту задачу переложить с PHP на SQL?

    Даже при использовании foreach Вам бы следовало делать цикл по массиву $valuebox_arr
     
  5. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    $csv_file_arrayfputs_ident - ПРосто номер строки, т..е идет многомерный массив, и он потом в CSV сохраняется. А для обозначения строки ввел $csv_file_arrayfputs_ident.
    Каждая новая строка (новый товар) значит $csv_file_arrayfputs_ident+1


    Массив всех возможных значений вынимается так ВЫБИРАЕМ ИЗ БАЗЫ ВСЕ СТВОЙСТВА КОТОРЫЕ ОТНОСЯТСЯ К МАГАЗИНУ.
    - $product_types_value_title_array_id - массив в итоге.


    $valuebox_arr - этот массив уже позже вынимаем к каждому товару. Т.е. если в экспорт пошел товар и него есть свойства, то массив $valuebox_arr не пустой.

    Сейчас вот к такому пришел:

    Сначала создаем список значений (с айди значения)

    PHP:
    1. $product_types_value_title_array_id[] = $myrow_result_shop_catalog_product_types_values['shop_catalog_product_types_valuebox_id'];
    потом уже когда есть количество этих значений - $count_total_colum = count($product_types_value_title_array_id);

    PHP:
    1.  $pti=0; #обнуляем что бы цикл количества рядков заново запустить
    2.                   while($pti <= $count_total_colums){
    3.                    $pti++;
    4.                
    5.              
    6.                  echo '<br>$valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr['.$product_types_value_title_array_id[$pti].'] - '.$valuebox_arr[$product_types_value_title_array_id[$pti]]; #ниже покажу результат
    7.  
    8.              
    9.                   if(isset($valuebox_arr[$product_types_value_title_array_id[$pti]]) and !empty($valuebox_arr[$product_types_value_title_array_id[$pti]])){
    10.              
    11.                      $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'1'.$end_sybmol; #если нашло
    12.              
    13.                    } else { //if(isset($valuebox_arr[$pti]) and !empty($valuebox_arr[$pti])){
    14.                       $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'-'.$end_sybmol; #если такого свойства не нашло
    15.                   }; //} else { //if(isset($valuebox_arr[$pti]) and !empty($valuebox_arr[$pti])){
    А вот такой у меня результат по echo. Может можно как-то упростить?

    PHP:
    1. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3802] -
    2. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3803] -
    3. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3804] -
    4. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3805] -
    5. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3806] -
    6. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3807] -
    7. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3808] -
    8. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3809] -
    9. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3810] -
    10. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3811] -
    11. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3812] -
    12. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3813] -
    13. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3814] -
    14. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3815] -
    15. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3816] -
    16. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3817] -
    17. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3818] -
    18. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3819] -
    19. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3822] -
    20. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3823] -
    21. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3824] -
    22. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3825] -
    23. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3826] -
    24. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3827] -
    25. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3828] -
    26. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3829] -
    27. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3830] -
    28. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4842] -
    29. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4330] -
    30. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3795] -
    31. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3796] -
    32. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[5075] -
    33. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4252] -
    34. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3797] -
    35. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3798] -
    36. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4331] -
    37. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3799] - 3799
    38. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4244] -
    39. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4282] -
    40. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3800] -
    41. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4342] -
    42. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4245] -
    43. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3801] -
    44. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4283] -
    45. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3864] -
    46. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3793] - 3793
    47. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3794] -
    48. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3905] -
    49. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3865] -
    50. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3898] -
    51. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3909] -
    52. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3876] -
    53. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3907] -
    54. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3908] -
    55. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3867] -
    56. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3879] -
    57. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3870] -
    58. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3906] - 3906
    59. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3866] -
    60. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3869] -
    61. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3896] -
    62. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3868] -
    63. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3874] -
    64. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3897] -
    65. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3911] -
    66. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3913] -
    67. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3912] -
    68. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3895] -
    69. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3901] -
    70. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3878] -
    71. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3900] -
    72. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3873] -
    73. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3872] -
    74. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3871] -
    75. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3877] -
    76. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3902] -
    77. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3899] -
    78. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3904] -
    79. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3875] -
    80. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3903] -
    81. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3910] -
    82. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3788] -
    83. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3783] - 3783
    84. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3781] -
    85. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3856] -
    86. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3786] -
    87. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3860] -
    88. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3767] - 3767
    89. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3776] -
    90. $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3777] -
     
    #5 social_project, 14 июл 2017
    Последнее редактирование модератором: 17 июл 2017
  6. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    так оно уже заполняет нужные ячейки, однако не радует то, что сильно много прогона данных получается, например 3000 товаров, в каждом по 150 полей доп прогона данных ... как-то не айс :( :)
     
  7. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    C основной задачей разрбрался... работает код сверху но этот доп перебор всех полей когда их 300 - это реально дурдом по прогону импорта. Как еще можно решить? может есть способ вставлять только в нужные ячейки без прогона всех полей остаточных?
     
  8. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    Закрываю запрос надо новый уже писать т.к. тему другая