Всем привет. Утомило, может что-то не доганяю, нужна помошь. И так , я делаю выгрузку значений товарв в csv при этом каждая строка новый многомерный массив. Потом в итоге сохраняется все верно. Поступила задача, добавить перечень полей свойств из базы, соотвественно длина перой строки увеличилась, т.к. кроме основных полей, нарпимер Название и Айди товара, добавился ВЕС, РОСТ, ЦВЕТ и так далее. Количество полей зависит от количества свойств, допустим их 50. После формирования первой строки, я создаю массив, в котором ЗНАЧЕНИЯ (айди значений) этих свойств забиты в массив. Позже при выборке товара нужно сделать проверку, если товар 1 содержит значение АЙДИ 3355, то поставить в этом поле единичку. Как сделать грамотно проверку ячеек, если они не просто общий массив должны искать, а перебирать значения в соответсвии с ячейкой. Т.е. например если ячейка имеет значние СИНИЙ, и она 45-ая в списке (столбец) то получается я делаю перебор всех полей Foreach PHP: $pti=0; while($pti <= $count_total_colums){ $pti++; $count_total_colums - количество этих доп полей $product_types_value_title_array_id[0] - строока номер ноль в ней массив значений, наример СИНИЙ значит = 3355, и так далее. $valuebox_arr - список всех свойств товра, например "3355,3677,5544" Ниже пробую найти значение соотвествие, но что-то не идет PHP: if(count($product_types_value_title_array_id[0]) > 0){ foreach($product_types_value_title_array_id[0] as $b=>$bi) { if (in_array($product_types_value_title_array_id[0][$b], $valuebox_arr[$pti])) { $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'1'.$end_sybmol; } else { //if (in_array($product_types_value_title_array_id[$csv_file_arrayfputs_ident][$b], $valuebox_arr[$pti])) { $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'--'.$end_sybmol; }; //if (in_array($product_types_value_title_array_id[$csv_file_arrayfputs_ident][$b], $valuebox_arr[$pti])) { }; //foreach($product_types_value_title_array_id[$csv_file_arrayfputs_ident] as $b=>$bi) { } 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, а если нет , то пустоту. Чую посадит сервак это дело... Нагрузка, массив и цикл внутри цикла.. ,Пробую пока PHP: $pti=0; while($pti <= $count_total_colums){ $pti++; echo '<br>$valuebox_arr[$pti] - '.$valuebox_arr[$pti].''; - это увидеть значения у товара if (in_array($product_types_value_title_array_id[$csv_file_arrayfputs_ident], $valuebox_arr[$pti])) { $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'1'.$end_sybmol; } else { //if (in_array($product_types_value_title_array_id[$pti], $valuebox_arr)) { $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.''.$end_sybmol; }; //} else { //if (in_array($product_types_value_title_array_id[$pti], $valuebox_arr)) {*/
Перевод: Есть трехмерный массив $products: 1 - пустое измерение; 2 - товары; 3 - идентификаторы свойств товаров Есть одномерный массив $valuebox_arr, который хранит идентификаторы всех возможных свойств товара Надо заполнить двумерный массив $csv: 1 - $csv_file_arrayfputs_ident (х.з. от куда это берется, похоже на идентификатор товара) 2 - наличие свойства у товара ( 1 или -- ). //Размер массива такой же как и у $valuebox_arr Вопросы: @social_project, как формируется 1-й массив? Нельзя ли эту задачу переложить с PHP на SQL? Даже при использовании foreach Вам бы следовало делать цикл по массиву $valuebox_arr
$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: $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: $pti=0; #обнуляем что бы цикл количества рядков заново запустить while($pti <= $count_total_colums){ $pti++; 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]]; #ниже покажу результат if(isset($valuebox_arr[$product_types_value_title_array_id[$pti]]) and !empty($valuebox_arr[$product_types_value_title_array_id[$pti]])){ $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'1'.$end_sybmol; #если нашло } else { //if(isset($valuebox_arr[$pti]) and !empty($valuebox_arr[$pti])){ $csv_file_arrayfputs[$csv_file_arrayfputs_ident][] = $start_sybmol.'-'.$end_sybmol; #если такого свойства не нашло }; //} else { //if(isset($valuebox_arr[$pti]) and !empty($valuebox_arr[$pti])){ А вот такой у меня результат по echo. Может можно как-то упростить? PHP: $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3802] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3803] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3804] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3805] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3806] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3807] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3808] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3809] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3810] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3811] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3812] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3813] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3814] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3815] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3816] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3817] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3818] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3819] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3822] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3823] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3824] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3825] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3826] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3827] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3828] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3829] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3830] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4842] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4330] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3795] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3796] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[5075] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4252] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3797] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3798] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4331] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3799] - 3799 $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4244] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4282] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3800] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4342] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4245] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3801] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[4283] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3864] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3793] - 3793 $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3794] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3905] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3865] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3898] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3909] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3876] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3907] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3908] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3867] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3879] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3870] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3906] - 3906 $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3866] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3869] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3896] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3868] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3874] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3897] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3911] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3913] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3912] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3895] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3901] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3878] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3900] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3873] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3872] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3871] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3877] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3902] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3899] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3904] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3875] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3903] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3910] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3788] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3783] - 3783 $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3781] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3856] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3786] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3860] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3767] - 3767 $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3776] - $valuebox_arr[$product_types_value_title_array_id[$pti]- $valuebox_arr[3777] -
так оно уже заполняет нужные ячейки, однако не радует то, что сильно много прогона данных получается, например 3000 товаров, в каждом по 150 полей доп прогона данных ... как-то не айс
C основной задачей разрбрался... работает код сверху но этот доп перебор всех полей когда их 300 - это реально дурдом по прогону импорта. Как еще можно решить? может есть способ вставлять только в нужные ячейки без прогона всех полей остаточных?