<?php
$arr = [ 'id' => 1, 'name' => 'item1', 'items' => [
[ 'id' => 2, 'name' => 'item2', 'items' => [], ],
[ 'id' => 3, 'name' => 'item3', 'items' => [], ],
[ 'id' => 4, 'name' => 'item4', 'items' => [
[ 'id' => 5, 'name' => 'item5', 'items' => [], ],
[ 'id' => 6, 'name' => 'item6', 'items' => [], ],
], ],
], ];
function list_form_iterative(array $input) {
$result = [ '<ul>', ];
$state = [ [ 'array' => $input, 'keys' => array_keys($input), 'idx' => 0, ] ];
for (; count($state) > 1 || $state[0]['idx'] < count($state[0]['keys']); $state[0]['idx'] += 1) {
if (count($state) > 1 && $state[0]['idx'] === count($state[0]['keys'])) {
array_shift($state);
continue;
}
$key = $state[0]['keys'][$state[0]['idx']];
$value = $state[0]['array'][$key];
if (!is_array($value)) {
$result[] = "<li>$key => $value</li>";
}
else {
$result[] = "<li>$key => []</li>";
if (!count($value)) continue;
array_unshift($state, [ 'array' => $value, 'keys' => array_keys($value), 'idx' => -1, ]);
}
}
$result[] = '</ul>';
return implode("\n", $result);
}
echo list_form_iterative($arr);
<?php
$arr = [ 'id' => 1, 'name' => 'item1', 'items' => [
[ 'id' => 2, 'name' => 'item2', 'items' => [], ],
[ 'id' => 3, 'name' => 'item3', 'items' => [], ],
[ 'id' => 4, 'name' => 'item4', 'items' => [
[ 'id' => 5, 'name' => 'item5', 'items' => [], ],
[ 'id' => 6, 'name' => 'item6', 'items' => [], ],
], ],
], ];
function list_form_recursive(array $input) {
static $level = 0;
$self = __FUNCTION__;
$result = [];
if (!$level) {
$result[] = '<ul>';
}
foreach ($input as $key => $value) {
if (!is_array($value)) {
$result[] = "<li>$key => $value</li>";
}
else {
$result[] = "<li>$key => []</li>";
if (!count($value)) continue;
$level += 1;
array_push($result, ...$self($value));
$level -= 1;
}
}
if (!$level) {
$result[] = '</ul>';
return implode("\n", $result);
}
else {
return $result;
}
}
echo list_form_recursive($arr);
<ul>
<li>id => 1</li>
<li>name => item1</li>
<li>items => []</li>
<li>0 => []</li>
<li>id => 2</li>
<li>name => item2</li>
<li>items => []</li>
<li>1 => []</li>
<li>id => 3</li>
<li>name => item3</li>
<li>items => []</li>
<li>2 => []</li>
<li>id => 4</li>
<li>name => item4</li>
<li>items => []</li>
<li>0 => []</li>
<li>id => 5</li>
<li>name => item5</li>
<li>items => []</li>
<li>1 => []</li>
<li>id => 6</li>
<li>name => item6</li>
<li>items => []</li>
</ul>
const as = (where, what) => what.filter(v => where.includes(v)).length;
what
, один только Array.filter()
не даст количества вхождений в where
букв из what
Array.filter()
не обойтись:const as = (where, what) => where.split('').filter(v => what.includes(v)).length;
куда копать?
proxy_protocol on
) не получится добиться желаемого, то на одном ip-адресе ваше "нужно" идёт в пешее эротическое<?php
// Выводим доп поле, если оно указано
if (get_field("название-поля")) { ?>
<p><?php the_field("название-поля"); ?>">ссылка</a></p>
<?php } else { ?>
<p>ну покажи мне хоть что-нибудь</p>
<?php } ?>
Мне нужно именно через функцию ImageGIF().
Caution When reading GIF files into memory, only the first frame is returned in the image object. The size of the image is not necessarily what is reported by getimagesize().
Number.toFixed()
на удивление возвращает строку, для строки нужно что-то типа .replace('.', ',')
Math.round()
и потом .toLocaleString()
.toLocaleString()
использует локаль браузера, которая не всегда бывает нужная, да ещё и вставит пробелы или запятые между разрядами.toLocaleString()
принимает локаль в качестве параметра try_files $uri /index.php;
file_get_contents('php://input')
вместо $_POSTconst photo = "https://blablabla.ru/sss.jpg?us=22&qq=11";
fetch(`https://example.site/example/example.php`, {
method: 'POST',
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(photo),
});
$test = json_decode(file_get_contents('php://input'), true);
var_dump($test);
Как объявить функцию так, чтобы drupal AJAX её увидел?
new InvokeCommand('document', 'trigger', [ 'sendMessage', 'test', ])
function(e, msg) {
alert('MY_EVENT');
}
время => [ количество-блоков, есть-переходящие, ]
количество-блоков
для 10:00, 10:30 и 11:00, а для 10:30 и 11:00 дополнительно ставим флаг есть-переходящие
, возможно дополняя ссылками на данные блока для удобства дальнейшей работыколичество-блоков
в сериях !есть-переходящие
, есть-переходящие
... (т.е. это максимальное значение присваиваем всей серии)количество-блоков