private static function serializeVkSongs($arr) { $data = array(); //data format is one singer to a lot of [song , download link ,enabled (it will be downloaded)] $struct = array(); // contains array of Singer objects if (!is_array($arr)) { throw new CHttpException(400, 'error when serialize'); } self::$songsCount = count($arr[1]); for ($i = 0; $i < self::$songsCount; ++$i) { $arr[2][$i] = Folder::cleaning($arr[2][$i]); $arr[3][$i] = Folder::cleaning($arr[3][$i]); $item = array('song' => $arr[3][$i], 'link' => $arr[1][$i], 'enabled' => true); $data[$arr[2][$i]][] = $item; } $options = new XMLOptions(); foreach ($data as $singer => $items) { // try to get real name from XML $name = $options->getNameByAlias($singer); // if it isset merge array of songs if ($name && isset($struct[$name])) { $struct[$name]->music = array_merge($struct[$name]->music, $items); continue; } $name = $name ? $name : $singer; $obj = new stdClass(); $obj->name = $name; $obj->music = $items; $obj->enabled = true; $struct[$name] = $obj; } return $struct; }