function appendValue($key, $value) {
$filepath = "./config.txt"; // путь к файлу
if (!file_exists($filepath)) throw "File not found";
$divider = PHP_EOL; // разделитель строк
$rows = explode($divider, file_get_contents($filepath));
$tmpfname = tempnam(sys_get_temp_dir(), 'Toster');
$fh = fopen($tmpfname, 'w');
$replaced = 0;
foreach($rows as $row) {
$data = explode(':', $row);
if (0 === count($data)) continue;
if ($data[0] == $key) {
array_push($data, $value);
$row = implode(':', $data);
$replaced++;
}
fputs($fh, $row . $divider);
}
fclose($fh);
// поменять файлы местами
unlink($filepath);
rename($tmpfname, $filepath);
return $replaced; // кол-во обновлённых строк. Вдруг, неуникален индекс?
}
appendValue(2, 33);
strtotime('monday this week');
(только на англ.)$rusdate='ПТ 18:00';
list($dow, $hours, $minutes) = sscanf($rusdate, "%s %d:%d");
$rusweek = explode(',','ВС,ПН,ВТ,СР,ЧТ,ПТ,СБ');
$ndow = array_search($dow, $rusweek);
date_default_timezone_set('Europe/Moscow'); // если не настроен PHP
$time = strtotime('monday this week') + 86400 * $ndow + 3600 * $hours + 60 * $minutes;
echo date('Y-m-d H:i:s', $time);
// 2018-10-13 18:00:00
$a
и посмотреть ; )echo
вы напишете запятую, то назначение $b
выполнится только в случае истинности условия в if
:$a = false;
if ($a) echo "не пусто"; $b = 1; // назначение $b выполнится всегда
if ($a) echo "не пусто", $b = 1; // назначение $b выполнится только при истинности $a
// второй вариант плохой, не делайте так. Результат $b = 1 передается как аргумент в echo
// лучше использовать фигурные скобки:
if ($a) {
echo "не пусто";
$b = 10;
}
// в скобках лучше читается
json_decode()
, если json файл окажется слишком большим.function num($amount) {
return max( 100 * floor($amount / 100), 100);
}
for($i = 0; $i < 500; $i += rand(0,90)) {
printf("%3d -> %3d\n", $i, num($i));
}
0 -> 100
2 -> 100
57 -> 100
105 -> 100
118 -> 100
166 -> 100
249 -> 200
254 -> 200
295 -> 200
307 -> 300
315 -> 300
349 -> 300
403 -> 400
437 -> 400
480 -> 400
488 -> 400
attachment
в messages.send().ts
формат, который потом можно просто склеивать.# из mp4 сделать ts
TMPVIDEO="tmp_video.ts"
ffmpeg \
-i "short.mp4" \
-bsf:v h264_mp4toannexb \
-an \
-f mpegts \
-y -hide_banner \
"$TMPVIDEO"
# до этого определить, сколько раз повторить фрагмент,
# чтобы покрыть длину mp3
REPEATS=5
LONGVIDEO="long_video.ts"
N=1
while [ $N -le $REPEATS ]; do
ffmpeg -i "concat:$TMPVIDEO|$TMPVIDEO" \
-c:v copy \
-y -hide_banner \
"$LONGVIDEO"
local STATUS=$? ; if [ $STATUS -ne 0 ]; then return $STATUS; fi
rm -f "$TMPVIDEO"
mv "$LONGVIDEO" "$TMPVIDEO"
local N=$[$N << 1]
echo "N: $N"
done
# получили длинное видео с запасом
# подрезать длину, чтобы точно соответствовала
FFMPEG -i "$TMPVIDEO" \
-c:v copy \
-t $MUSIC_LENGTH \
-y -hide_banner \
"$LONGVIDEO"
$d = array('test-site', 'ru');
$e = array('ST-214E2210-33FE865E-EC05E9A3', 'ST-204C2010-3DEFEFBE-C30E1243', 'ST-214E4000-3D4F3356-E2BCEEBB');
do {
$b = implode('.', $d); // склеили, получили "test_site.ru"
foreach ($e as $sKey){ // перебираем ключи
$a = explode('-', $sKey) + array(0, 0, 0, 0); // разбили по дефису в массив,
// убедились, что в массиве как минимум 4 элемента (если меньше, допис. нулями)
!( // логическое отрицание того, что в скобках
Core::convert64b32( // из 64 бит в 32
Core::convert64b32(
hexdec($a[3]) // последний фрагмент ключа перевели из 16-ричного в 10-е число
)
^ // ксор, побитовое исключающее ИЛИ
abs(Core::crc32($b)) // 32-битное число, хэш из адреса сайта
)
^ // XOR см. выше
~( // побитовое отрицание
Core::convert64b32(
Core_Array::get( // тут из конфига получают значение "hostcms"
Core::$config->get('core_hostcms'),
'hostcms'
)
)
& // побитовое И
abs(Core::crc32($b))
^
Core::convert64b32(
hexdec($a[2]) // предпоследний фрагмент из ключа, как число
)
)
)
&& // только если выше в скобках получился 0, выполнится следующая строка
Core::$url['key'] = $sKey;
}
array_shift($d);
} while(count($d) > 1);
$a = explode('-', $sKey) + array(0, 0, 0, 0);
"cloo"
два значения ["cool", "looc"]
, а для остальных по одному.<?php
$data = [
"cool" => [0 => "c", 1 => "o", 2 => "o", 3 => "l"],
"looc" => [0 => "l", 1 => "o", 2 => "o", 3 => "c"],
"test" => [0 => "t", 1 => "e", 2 => "s", 3 => "t"],
"set" => [0 => "s", 1 => "e", 2 => "t"],
"get" => [0 => "g", 1 => "e", 2 => "t"]
];
$groups = [];
foreach( $data AS $k => $v) {
sort($v);
$hash = implode('', $v);
if(!isset($groups[$hash])) $groups[$hash] = [];
array_push($groups[$hash], $k);
}
$result = array_values($groups);
print_r($result);
/*
Array(
[0] => Array
(
[0] => cool
[1] => looc
)
[1] => Array
(
[0] => test
)
[2] => Array
(
[0] => set
)
[3] => Array
(
[0] => get
)
)
*/