$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
)
)
*/
date_diff()
– из двух дат получите объект с числом дней, месяцев, лет между ними. Только сбросьте на 0 время у обеих дат, чтобы работать только с датами. Такой вариант пригодится для более сложного случая, когда вы захотите ещё "Два дня назад", "Послезавтра" и "через неделю" function nearest( $sample, $arr) {
$found = false;
foreach( $arr AS $row) {
if($row[0] <= $sample[0] && $row[1] <= $sample[1] && $row[2] <= $sample[2]) $found = $row;
else break;
}
return $found;
}
$data = [
[1, 1, 1],
[1, 2, 1],
[1, 2, 2],
[1, 5, 4],
[1, 5, 6],
[2, 1, 6],
[2, 2, 2],
];
echo implode(',', nearest( [1,5,5], $data)); // 1,5,4
apc_store()
, apc_fetch()
и apc_inc() – увеличить сохранённое число. array_pop( array_keys( $arr))
<?php
$arr = [
2 => 1,
3 => 1,
4 => 1,
];
echo array_pop( array_keys( $arr)) . PHP_EOL; // 4
foreach ($request->getParams() as $key => $param) {
foreach ($_REQUEST as $key => $param) {
$sign = "";
foreach($_REQUEST AS $key => $param) {
if ($key == 'hash' || $key == 'sign') continue;
$sign .=$param;
}
$secret = '3iiyZNDFaXgR6yZMxK'; // Настройки приложения – Защищённый ключ
$sig = $secret ? hash_hmac('sha256', $sign, $secret) : "";
if( $sig === $_REQUEST['sign']) {
echo "Подписи совпали.";
} else {
echo "Разные подписи, не хорошо.";
}
function _replace(&$str, &$trans){
$arr = preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY);
for ($i = 0; $i < count($arr); $i++) {
if( isset($trans[$arr[$i]]) && rand(0,1)) {
$arr[$i] = $trans[$arr[$i]];
}
}
$str = implode('', $arr);
}
CURLOPT_CUSTOMREQUEST
задавать традиционно:CURLOPT_HTTPGET => TRUE, // GET
// или
CURLOPT_POST => TRUE, // POST
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_SSL_VERIFYSTATUS => FALSE,
*_TIME