const initialState = {
result: [], // list of ids
data: {}, // map by id
}
export const placesReducer = (state, { type, payload }) => {
switch (type) {
case 'PLACES_LOAD_SUCCESS':
return {
...state,
// псевдокод, можно использовать https://github.com/paularmstrong/normalizr
result: payload.map(id),
data: payload.reduce(keyById),
}
}
}
// по этому результату делаете .map
export const getPlaces = state => state.places.result
// этот селектор будет дергать каждый Place, только ему нынче кидайте не place={place}, а id={id}, ибо .map по идентификаторам идёт
export const getPlace = (state, id) => state.places.data[id];
select user_id
from projects as p
where p.begin_date = current_date
and not exists
(
select 1
from projects p2
where p.begin_date - 30 <= p2.end_date and p.begin_date >= p2.begin_date
and p.user_id = p2.user_id
and p.id <> p2.id
)
$array = [
[
'name' => 'Николай Васильевич',
'email' => 'gogol@gogol.ru',
'birth_date' => '1809',
//... необходимые поля для автора
'books' => [
[
'name' => 'Мертвые души',
'date' => '1841',
],
[
'name' => 'Вий',
'date' => '1834',
],
//... перечисление всех книг автора
],
],
[
'name' => 'Пушкин',
'email' => 'alexandr@sergeevich.ru',
'birth_date' => '1799',
'books' => [
[
'name' => 'Евгений Онегин',
'date' => '1823',
],
//...
],
],
//... и т.д.
];
// информация об авторе
foreach ($array as $author) {
echo $author['name'].' - '.$author['email'].' - '.$author['birth_date'].'<br>';
}
echo '<hr>';
// о книгах
foreach ($array as $author) {
foreach ($author['books'] as $book) {
echo $book['name'].' - '.$author['name'].' - '.$book['date'].'<br>';
}
}
>>> def round_time(x):
... hour_in_seconds = 60 * 60
... half_hour_in_seconds = 60 * 30
... if x % hour_in_seconds > half_hour_in_seconds:
... return ((x // hour_in_seconds) + 1) * hour_in_seconds
... else:
... return (x // hour_in_seconds) * hour_in_seconds
...
>>>
>>> str(datetime.timedelta(seconds=3590))
'0:59:50'
>>> str(datetime.timedelta(seconds=round_time(3590)))
'1:00:00'
>>> str(datetime.timedelta(seconds=390))
'0:06:30'
>>> str(datetime.timedelta(seconds=round_time(390)))
'0:00:00'
>>> str(datetime.timedelta(seconds=5390))
'1:29:50'
>>> str(datetime.timedelta(seconds=round_time(5390)))
'1:00:00'
>>> str(datetime.timedelta(seconds=7390))
'2:03:10'
>>> str(datetime.timedelta(seconds=round_time(7390)))
'2:00:00'
axios.post('/login', { body: 'Hello' })
.then(function(res) {
alert(res.data);
});
const login = options => axios.post('/login', options);
const login = function(options) {
return axios.post('/login', options);
}
login(options).then(res => alert(res.data));
login(options).then(function(res) {
alert(res.data);
});
async () => {
try {
const { data } = await login(options);
/* some other logic */
} catch e {
console.log('Server request error:', e);
}
}
\Bitrix\Main\Loader::IncludeModule("highloadblock");
$xmlID = '21XlirMU'; //подставьте нужный вам внешний код
$tblName = 'years';
$select = ['UF_NAME']; // или как у вас поле называется
$filter = ['UF_XML_ID'=>$xmlID];
$limit = 1;
$hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(
array("filter" => array('TABLE_NAME' => $tblName))
)->fetch();
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
$Query = new \Bitrix\Main\Entity\Query($entity);
$Query->setSelect($select);
$Query->setFilter($filter);
$Query->setOrder([]);
$Query->setLimit($limit);
$result = $Query->exec();
$arResult = new \CDBResult($result);