array()
на []
Создаёт массив с единственным элементом. И присваивает его в$options[$k] = [$row['value']]; // то же самое, что $options[$k] = array($row['value']);
$options[$k]
$arr1 = [ 1, 2, 3 ];
// то же самое, что
$arr1 = array(1, 2, 3);
$arr2 = [
'Habr' => 'QnA',
'Stack' => 'Overflow',
];
// то же самое, что
$arr2 = array(
'Habr' => 'QnA',
'Stack' => 'Overflow',
);
.hidden { display: none; }
document.querySelectorAll('li')
.forEach(li => li.classList.toggle('hidden', !li.querySelector('span')));
для каждого элемента списка устанавливает или снимает класс hidden
, в зависимости от того, найдётся ли span
где-нибудь внутри этого элемента. const tensor = tf.squeeze(result);
const canvas = document.createElement('canvas');
canvas.width = tensor.shape.width
canvas.height = tensor.shape.height
await tf.browser.toPixels(tensor, canvas);
const cat2 = document.createElement('img');
cat2.src = canvas.toDataURL();
$args = [
'name1' => FILTER_SANITIZE_STRING,
'age1' => FILTER_SANITIZE_NUMBER_INT,
'weight1' => FILTER_SANITIZE_NUMBER_FLOAT,
];
$defaults = [
"name1" => "по умолчанию",
"age1" => "по умолчанию",
"weight1" => "по умолчанию",
];
$results = array_merge($defaults, filter_input_array(INPUT_GET, $args));
// вывод
foreach ($results as $name => $value) {
printf('<p>%s: %s</p>', $name, $value);
}
Math.sqrt(N)
// дизель* генератор
const ltSqr = function*(n) {
const limit = Math.min(100, Math.sqrt(n));
let i = 1;
while (i <= limit) {
yield i++;
}
}
// использование
let N = 42;
for (const x of ltSqr(N)) {
console.log(x);
}
// выведет натуральные от 1 до 6
force_original_aspect_ratio
пропорции;ffmpeg -framerate 1/10 -i img%3d.png -i audio.wav \
-vf 'scale=3840:2880:force_original_aspect_ratio=decrease,pad=3840:2880:(ow-iw)/2:(oh-ih)/2,setsar=1' \
-c:v libx264 -crf 14 -r 25 -pix_fmt yuv420p -shortest output.mp4
via https://cdn.jsdelivr.net/npm/sweetalert2@11.4.8
DISCLAIMER
Реализации сортировки могут быть разными.{ // выполнить в консоли браузера
const oneTest = () => {
let iterations = 0;
[1, 2, 3].sort((a, b) => {
const result = Math.random() > Math.random() ? 1 : -1;
console.log(`${iterations}: ${a} vs ${b} = ${result}`);
iterations++;
return result;
});
return iterations;
}
console.clear();
const totalTests = 10;
const stats = {};
for (let test = 0; test < totalTests; test++) {
console.group(`Test ${test + 1} of ${totalTests}`);
const iterations = oneTest();
stats[iterations] ??= 0;
stats[iterations]++;
console.groupEnd();
}
console.log(JSON.stringify(stats, null, 2));
}
$options = [
[null, $_LNG['TYPE_ORDER']],
['select_all', $_LNG['ALL_TYPES']],
['select_domain', $_LNG['DOMAIN']],
['select_server', $_LNG['SERVER']],
['select_ssl', $_LNG['SSL']],
['select_desing', $_LNG['DESING']],
['select_script', $_LNG['SCRIPT']],
['select_layout', $_LNG['LAYOUT']],
['select_adv', $_LNG['ADV']],
['select_seo', $_LNG['SEO']],
];
printf('const options = %s;', json_encode($options));
options
полноценный элемент select
со всеми опциями: createSelect = () => {
const select = document.createElement('select');
options.forEach(([value, title]) => {
const option = document.createElement('option');
option.innerText = title;
if (value) {
option.value = value;
} else {
option.setAttribute('disabled', true);
option.setAttribute('selected', true);
}
select.appendChild(option);
});
return select;
};
размером с тумбочку
возвращает массив индексов элементов, у которые значение равно value.
const findIndex = (arr, value) => arr
.map((v, i) => ({ v, i }))
.filter(({ v }) => v === value)
.map(({ i }) => i);
Каждый элемент массива переделать в объект, где v
: элемент, а i
: индекс в массиве.бывш.элемент === value
i
setAttribute("disabled", true)
в зависимости от заполненности всех. Слушателем события "input" на каждом из полей вызывать эту функцию.