<?php
define('_JEXEC', 1);
define('JPATH_BASE', dirname(__FILE__));
define('DS', DIRECTORY_SEPARATOR);
require_once(JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once(JPATH_BASE . DS . 'includes' . DS . 'framework.php');
$app = JFactory::getApplication('site');
$app->initialise();
?>
function rebuild(array $array) {
$count_children = [];
$without_children = [];
foreach ($array as $id => $element) {
// инициализация подсчета дочерних элементов, если это еще не было сделано
if (!isset($count_children[$id])) {
$count_children[$id] = 0;
}
if ($count_children[$id] === 0) {
$without_children[] = $id;
}
if ($element['pos'] === 0) {
continue;
}
// инкремент кол-ва дочерних элементов для родительского эл-та
if ( !isset($count_children[$element['pos']]) ) {
$count_children[$element['pos']] = 0;
}
$count_children[$element['pos']]++;
// удаление родительского эл-та из списка "бездочерних" элементов
if (($key = array_search($element['pos'], $without_children)) !== false) {
unset($without_children[$key]);
}
}
while(!empty($without_children)) {
foreach ($without_children as $key => $id) {
$parent_id = $array[$id]['pos'];
if ($parent_id !== 0) {
if (!isset($array[ $parent_id ]['playlist'])) {
$array[ $parent_id ]['playlist'] = [];
}
$array[$parent_id]['playlist'][] = $array[$id];
unset($array[$id]);
$count_children[$parent_id]--;
if ($count_children[$parent_id] <= 0 && $parent_id !== 0) {
$without_children[] = $parent_id;
}
}
unset($without_children[$key]);
}
}
return $array;
}
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'pusher');
$socket->connect("tcp://localhost:5555");
$loop = React\EventLoop\Factory::create();
$loop->addPeriodicTimer(1, function() use ($socket){
$socket->send('notices');
});
$loop->run();