В массивах новичок и есть много, что еще надо изучить.
Помогите разобраться с проблемой:
История:
Есть несколько поставщиков от них дергаем товары онлайн по API и создаем массив данных, артикул, цена и т.д.
Есть настройки в MySQL по поставщикам и там в таблице w_wbs у поставщика есть поля: limit_delivery_active (активны ограничения - параметр 0/1) и limit_delivery_max(лимит в днях поставки).
К слову добавлю ощущение, что limit_delivery_max - задумали как дни на ограничение, а по факту это количество позиций..
Далее есть файл на ограничения/лимиты.
wbs_limits.model.php - в нем:
-------------------------------------------начало файла-----------------------------------------------------------------------
<?php
class Wbs_limitsModel extends Orm
{
public static function set_limits( $wbsData = array(), $data = array() )
{
$model = new Wbs_limitsModel();
// ставим лимиты по "сроку поставки" - минимальные и от установ. кол-ва
// ставим лимиты по "цене" - минимальные и от установ. кол-ва
// на будущее
// ставим лимиты по "эффективности поставщика" - минимальные и от установ. кол-ва
$limits = array();
$limits ['price'] = ($wbsData['limit_price_active'])?$wbsData['limit_price_max']:false;
$limits ['delivery'] = ($wbsData['limit_delivery_active'])?$wbsData['limit_delivery_max']:false;
if ($limits['price'] || $limits['delivery'])
$data = $model->data($data, $limits);
return $data;
}
// конец
private function data( $data = array(), $param_limits = array() )
{
$model = new Wbs_limitsModel();
$array = array();
// !!!! ПОДГОТОВКА
// сортируем по бренду и артикулу
// для того чтоб выделить группы для лимитов
if (isset($data) && count($data)>0)
{
foreach ($data as $row)
{
$row = (array)$row;
// если сроки имеет множественное значение типа 2-5 дня, берем максимальный
$convert_delivery = $row['DELIVERY'];
if (strpos($convert_delivery, "-")){
list( , $convert_delivery) = explode("-", $convert_delivery);
}
elseif (strpos($convert_delivery, "/")){
list( , $convert_delivery) = explode("/", $convert_delivery);
}
$array [FuncModel::stringfilter($row['BRAND_NAME']).FuncModel::stringfilter($row['ARTICLE'])] []= array_merge( (array)$row, array('DELIVERY' => (int)$convert_delivery) );
}
}
// сброс
unset($data);
// !!!! ОБРАБОТКА
$data = array();
// лимитируем выдачу группы бренда
if (count($array)>0)
{
ksort($array);
foreach ($array as $key => $row)
{
// группа бренда и артикула
$get_group_of_braart = $array[$key];
// цена - лимиты
if (isset($param_limits['price']) && $param_limits['price']){
// сортируем по цене
$get_group_of_braart = $model->array_usort_price( $get_group_of_braart );
// проверяем - цены
$i = 0;
foreach ($get_group_of_braart as $id => $list) { $i++;
if ( $param_limits['price'] >= $i ){
// возврат
$data []= $list;
// удаляем что уже привязали
unset($get_group_of_braart[$id]);
}
else
break;
}
}
// поставка срок - лимиты
if (isset($param_limits['delivery']) && $param_limits['delivery'])
{
if (count($get_group_of_braart)>0) {
// сортируем по поставке
$get_group_of_braart = $model->array_usort_delivery( $get_group_of_braart );
// проверяем - поставка
$i = 0;
$day = $wbsData['limit_delivery_max']; // переменная для отсекания по дням поставки
foreach ($get_group_of_braart as $list) { $i++;
if ( $param_limits['delivery'] >= $i)
$data []= $list;
else
break;
}
}
}
// сброс
unset($array[$key], $get_group_of_braart);
}
}
unset($array);
return $data;
}
// конец
// сортировка
function array_usort_delivery($array)
{
usort($array, function($lft, $rgt) {
if ($lft['DELIVERY'] > $rgt['DELIVERY'])
return 1;
if ($lft['DELIVERY'] < $rgt['DELIVERY'])
return -1;
if ($lft['DELIVERY'] == $rgt['DELIVERY'] && $lft['PRICE'] > $rgt['PRICE'])
return 1;
if ($lft['DELIVERY'] == $rgt['DELIVERY'] && $lft['PRICE'] < $rgt['PRICE'])
return -1;
return 0;
});
return $array;
}
function array_usort_price($array)
{
usort($array, function($lft, $rgt) {
if ($lft['PRICE'] > $rgt['PRICE'])
return 1;
if ($lft['PRICE'] < $rgt['PRICE'])
return -1;
return 0;
});
return $array;
}
// конец
}
?>
-------------------------------------------конец файла-----------------------------------------------------------------------
Вопрос главный как сделать, что бы фильтр ограничения по дням доставки работал как фильтр ОГРАНИЧЕНИЯ по дням доставки. Беря данные в ячейках от текущего поставщика, которого он обрабатывает и режет товар, который по дням поставки больше.