преобразовать
['a' => [11, 12], 'b' => [21, 22]]
в
[['a' => 11, 'b' => 12], ['a' =>21, 'b' => 22]]
12
из a
становится значением свойства b
, а 21
- наоборот? Опечатка? - наверное, в a
исходного массива лежат значения свойств a
результата, аналогично и с b
.array_map(fn($i) => array_combine(array_keys($arr), array_column($arr, $i)), array_keys(array_values($arr)[0]))
как я вижу, веб-разработка, в качестве ремесла, неуклонно загибается.
Работать и изучать приходится всё больше, а платят всё меньше.
Нужен какой-то ресурс, с нормальной взрослой аналитикой, на основе которого можно принять решение о том, что именно сейчас наиболее востребованно, и более-менее устойчиво.
Грубо говоря: что сейчас стоит начать учить, чтобы через полгода был вал заказов и море бабла? ))
Где сейчас бум идет, или намечается?
curl -всякие опции и ссылка > file.zip
ssh -ND 5555 my_ssh_host_config_name
где в файле ~/.ssh/config
указан конфиг хоста: Host my_ssh_host_config_name
HostName 123.12.12.123
Port 1234
User username
IdentityFile ~/.ssh/id_rsa
127.0.0.1
, Port: 5555
, SOCKS v5
а сейчас не могу понять как это сделать?
void display()
{
glClear( GL_COLOR_BUFFER_BIT );
glBegin( GL_LINE_LOOP );
for( size_t index = 0; index < vertices.size(); ++index )
{
const Vertex& vertex = vertices[ ( index * 3 ) % vertices.size() ];
glVertex2i( vertex.x, vertex.y );
}
glEnd();
glFlush();
}
def _get_ending(n, endings):
n = n % 100
if n >= 11 and n <= 19:
return endings[2]
else:
n = n % 10
if n == 1:
return endings[0]
elif n > 1 and n < 5:
return endings[1]
else:
return endings[2]
def _get_message(limit):
if limit > 3660:
limit //= 3600
endings = [_('часа'), _('часов'), _('часов')]
elif limit > 60:
limit //= 60
endings = [_('минуты'), _('минут'), _('минут')]
else:
endings = [_('секунды'), _('секунд'), _('секунд')]
return _('Форма отправлялась менее {} {} назад').format(limit, _get_ending(limit, endings))
def post_limit_middleware(get_response):
limits = getattr(settings, 'REQUEST_LIMITS', {})
def middleware(request):
if request.method == 'POST':
match = resolve(request.path_info)
name = '{}:{}'.format(match.namespace, match.url_name) if match.namespace else match.url_name
limit = limits.get(name)
if limit is not None:
now = datetime.now()
user_id = request.user.username if request.user.is_authenticated else get_ip(request)
key = hashlib.md5(user_id.encode()).hexdigest()
cache_name = 'last-request.{0}.{1}'.format(name, key)
last_request = cache.get(cache_name, now - timedelta(days=1))
if (now - last_request) < timedelta(seconds=limit):
cache.set(cache_name, now)
if request.is_ajax():
response = JsonResponse([_get_message(limit)], safe=False)
response.status_code = 429
else:
response = render(request, '429.html', {'message': _get_message(limit)})
response.status_code = 429
return response
else:
cache.set(cache_name, now)
response = get_response(request)
return response
return middleware
REQUEST_LIMITS = {
'contact_form': 3600,
}
SELECT
o.order_id,
lpad(o.order_id::text, 8, '0') AS order_number,
o.order_date,
o.order_state,
o.member_id,
o.contacts_data_id,
o.invoice_uuid,
o.invoice_number,
z.organization_short_name AS company,
z.organization_id,
y.organization_business_number AS bin,
f.contact_firstname AS firstname,
f.contact_lastname AS lastname,
d.*,
p.*,
x.supply_id,
i.invoice_id,
'2'||lpad(i.order_id::text, 6, '0') AS invoice
FROM
orders o
JOIN contacts_data s ON
o.contacts_data_id = s.contacts_data_id
JOIN contacts f ON
s.contact_id = f.contact_id
JOIN organizations z ON
s.organization_id = z.organization_id
LEFT JOIN organization_data y ON
z.organization_id = y.organization_id
JOIN order_data d ON
o.order_id = d.order_id
JOIN spare_parts p ON
p.part_id = d.part_id
LEFT JOIN supply_data x ON
x.order_data_id = d.order_data_id
LEFT JOIN supply xx ON
xx.supply_id = x.supply_id
LEFT JOIN invoices i ON
i.order_id = d.order_id