<?php
$datapost = array(
array(
'header' => 'город Москва',
'category_id' => '1',
),
array(
'header' => 'село Огонёво',
'category_id' => '2',
),
array(
'header' => 'село Быстрино',
'category_id' => '2',
),
array(
'header' => 'посёлок Восточный',
'category_id' => '7',
),
);
$query = mysqli_query($connect, "SELECT `id` FROM `category` ");
$rows = mysqli_fetch_all($query, MYSQLI_ASSOC);
$arIDs = [];
foreach($rows as $row) {
$arIDs[$row['id']] = $row['id'];
}
$arResults = [];
foreach($datapost as $data) {
if(array_key_exists($data['category_id'], $arIDs))
$arResults[$data['category_id']][] = $data;
}
print_r($arResults);
SELECT
*
FROM
table_b
WHERE
id IN(SELECT
DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(`keys`, ',', n.digit+1), ',', -1) val
FROM
table_a
INNER JOIN
(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
ON LENGTH(REPLACE(`keys`, ',' , '')) <= LENGTH(`keys`)-n.digit
WHERE `id` = 1
);
В криптографии, атака нахождения прообраза криптографической хеш-функции — это попытка отыскать сообщение с заданным значением хеша. Существуют два типа подобных атак:
Атака нахождения первого прообраза: по данному значению хеша h найти такое сообщение m, что hash(m) = h.[1]
Атака нахождения второго прообраза: по данному сообщению m1 найти отличное от него сообщение m2 такое, что hash(m2) = hash(m1).[1]
Для идеальной n-битовой хеш-функции сложность нахождения первого прообраза составляет 2n, что считается высоким показателем, учитывая среднюю длину хеш-значений (порядка 160 бит). Если злоумышленник не может провести атаку с меньшими затратами, то такая хеш-функция считается устойчивой к атаке нахождения прообраза.
Разработанные на сегодняшний момент атаки на прообраз не являются практически пригодными. Если такую атаку возможно будет применить на практике, то это сильно повлияет на многие протоколы сети Интернет. В данном ключе, слово «практический» означает, что атака может быть проведена за разумное время при разумных затратах. Атака по нахождению прообраза, которая стоит миллиарды и занимает десятилетия вычислений, совсем не практична; в то же время атака, на которую уйдёт всего несколько тысяч долларов и несколько недель вычислений, применима на практике.
Все известные на сегодняшний момент применимые или почти применимые на практике атаки[2][3][4] на MD5 и SHA-1 — это коллизионные атаки, которые легче для проведения[5]. Устойчивость к нахождению прообраза можно свести к устойчивости к коллизиям.
INSERT INTO `table` (`DATE_CREATE`, `DATE_UPDATE`, `ACTIVE`, `USER_ID`, `VALUE`) VALUES
(NOW(), NOW(), 1, 1, 1),
(NOW(), NOW(), 1, 1, 2),
(NOW(), NOW(), 1, 1, 3),
/*...*/
(NOW(), NOW(), 1, 1, 9999);
Какой пуль является best practices для Laravel+Vue?
$promo_mask = 'XXXX-5555-XXXX-5555';
$mask_count = substr_count($promo_mask, 'X');
$promo = $promo_mask;
$chars = '12345ABCDEFGHIJKLMNOPQRSTUVWXYZ67890';
$hashpromo = '';
for($ichars = 1; $ichars <= $mask_count; ++$ichars) {
$random = str_shuffle($chars);
$promo = preg_replace('/X/', $random[$ichars], $promo, 1);
}
echo $promo;
<?php
$TEST_DATA = 'Продукт 1; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 2; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 3; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 4; Воздуховоды/Круглые/Нержавеющие;
Продукт 5; Воздуховоды/Круглые/Нержавеющие;
Продукт 6; Воздуховоды/Круглые/Нержавеющие;';
$TEST_DATA2 = 'Продукт 1; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 2; Воздуховоды/Круглые/Нержавеющие;
Продукт 3; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 4; Воздуховоды/Круглые/Нержавеющие;
Продукт 5; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 6; Воздуховоды/Круглые/Нержавеющие;';
$arData = array_map(function($val) {
return array_filter(array_map('trim', explode(';', $val)));
}, preg_split('#[\r\n]#isu', $TEST_DATA, -1, PREG_SPLIT_NO_EMPTY));
/* Всё, что выше - к задаче не относится...имитация получения данных из CSV... */
$arRes = [];
foreach($arData as $data) {
$arCategories = array_filter(array_map('trim', explode('/', $data[1])));
$MAIN_CATEGORY = array_shift($arCategories);
$HASH = md5(implode('/', $arCategories));
$arRes[$MAIN_CATEGORY][$HASH][] = [
'product_name' => $data[0],
'category' => $data[1],
'category_items' => $arCategories
];
}
$HASH = false;
foreach($arRes as $main_category => $arSubCategories) {
echo $main_category."\r\n";
foreach($arSubCategories as $h => $arItems)
foreach($arItems as $item) {
if($HASH != $h) {
$HASH = $h;
foreach($item['category_items'] as $k => $category) {
$k++;
echo str_repeat('!', $k).$category."\r\n";
}
}
echo $item['product_name'].';'.$item['category'].';'."\r\n";
}
}
/* RESULT:
Воздуховоды
!Прямоугольные
!!Оцинкованные
Продукт 1;Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 2;Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 3;Воздуховоды/Прямоугольные/Оцинкованные;
!Круглые
!!Нержавеющие
Продукт 4;Воздуховоды/Круглые/Нержавеющие;
Продукт 5;Воздуховоды/Круглые/Нержавеющие;
Продукт 6;Воздуховоды/Круглые/Нержавеющие;
*/
<?php
$TEST_DATA = 'Продукт 1; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 2; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 3; Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 4; Воздуховоды/Круглые/Нержавеющие;
Продукт 5; Воздуховоды/Круглые/Нержавеющие;
Продукт 6; Воздуховоды/Круглые/Нержавеющие;';
$arData = array_map(function($val) {
return array_filter(array_map('trim', explode(';', $val)));
}, preg_split('#[\r\n]#isu', $TEST_DATA, -1, PREG_SPLIT_NO_EMPTY));
/* Всё, что выше - к задаче не относится...имитация получения данных из CSV... */
$VAR = false;
$VAR2 = false;
foreach($arData as $data) {
$arCategories = array_filter(array_map('trim', explode('/', $data[1])));
$MAIN_CATEGORY = array_shift($arCategories);
if($VAR !== $MAIN_CATEGORY) {
$VAR = $MAIN_CATEGORY;
echo $MAIN_CATEGORY."\r\n";
}
$CATEGORIES = implode('/', $arCategories);
if($VAR2 !== $CATEGORIES) {
foreach($arCategories as $k => $category) {
$k++;
echo str_repeat('!', $k).$category."\r\n";
}
$VAR2 = $CATEGORIES;
}
echo $data[0].';'.$data[1].';'."\r\n";
}
/* RESULT:
Воздуховоды
!Прямоугольные
!!Оцинкованные
Продукт 1;Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 2;Воздуховоды/Прямоугольные/Оцинкованные;
Продукт 3;Воздуховоды/Прямоугольные/Оцинкованные;
!Круглые
!!Нержавеющие
Продукт 4;Воздуховоды/Круглые/Нержавеющие;
Продукт 5;Воздуховоды/Круглые/Нержавеющие;
Продукт 6;Воздуховоды/Круглые/Нержавеющие;
*/
И да, я использую 'sync' (для тестирования) - может поэтому Auth::user() доступен?
Вообще, может посоветует кто:
- Я использую для хранения и передачи некоторых данных - сессии.
Но внутри Job - Request, а, значит, и сессии - недоступны.
Переписывать логику без сессий - неохота :D
Или по любому придется, если я хочу использовать Jobs?