Delphinum, Как вам будет угодно Сер.
А вобще я уже понял. Надо сделать 2 класа, один like ну а второй так и останитса vote )
<?php
/* *
* Клас опитувань
* Автор: BoGdAn/ARMYbodya <armybodya@gmail.com>
* URL: https://weua.info/bogdan
* Дата: 29 вересня 2014р
* Оновлення: 12 грудня 2014р
*/
// Допоміжний клас парсера
class parseString {
/* *
* Масив у лінію
*
* @param array $arr масив
* @return strsng
*/
function array_to_string($arr, $max = 0) {
//return serialize($arr);
if($max == 1)
$str = implode(',', $arr);
else {
$count = count($arr);
foreach($arr as $v) {
$str .= implode(',' ,$v);
if(++$i != $count)
$str .= '|';
}
}
return $this->string($str);
}
/* *
* Лінію у масив
*
* @param strsng $str лінія
* @return array
*/
function string_to_array($str, $max = 0) {
//return unserialize($str);
$str = $this->string($str);
if($max == 1) {
if(empty($str)) return array();
$arr = explode(',', $str);
}
else {
$arr = array();
$v = empty($str) ? array() : explode('|', $str);
if(!$max)
$max = count($v);
for($i = 0; $i <= ($max-1); ++$i)
$arr[] = empty($v[$i]) ? array() : explode(',', $v[$i]);
}
return $arr;
}
/* *
* "Вирівнює" масив
*
* @param array $arr
* @return array
*/
function to_flat_array($arr){
$out = array();
if(!is_array($arr))
return $arr;
foreach($arr as $v) {
$req = $this->to_flat_array($v);
if(is_array($req))
$out = array_merge($out, $req);
else
$out[] = $req;
}
return $out;
}
/* *
* Приберає переноси ліній
*
* @param string $str лінія
* @return string
*/
function string($str) {
$arr = array("\n" => '', "\r" => '', ' ' => '');
return strtr($str, $arr);
}
}
//////////////////////////////////////////
// Клас Like (мені подобається)
class Like extends parseString {
/* *
* Масив із індетефікаторами
*
* @var array
*/
public $arr;
/* *
* Конструктор класу
*
* @param string $str лінія для обробки
*/
function __construct($str) {
$str = $this->string($str);
$this->arr = $this->string_to_array($str, 1);
}
/* *
* Додаємо якщо немає/видаляєм якщо є ідентифікатор
*
* @param string|int $id ідентифікатор
* @return strsng віддає лінію із доданим/видалиним індетефікатором
*/
function add($id) {
if(in_array($id, $this->arr)) {
$arr_flip = array_flip($this->arr);
unset($arr_flip[$id]);
$this->arr = array_flip($arr_flip);
}
else
$this->arr[] = $id;
return $this->array_to_string($this->arr, 1);
}
/* *
* Кількість ідентифікаторів
*
* @return int
*/
function view() {
return count($this->arr);
}
/* *
* Чи є ідентифікатор в базі
*
* @param string|int $id ідентифікатор
* @return bool
*/
function in_vote($id) {
if(in_array($id, $this->arr))
return TRUE;
else
return FALSE;
}
/* *
* Отримуємо ідентифікатори опитаних
*
* @return array
*/
function uslist() {
return $this->arr;
}
}
///////////////////////////////////////////
// Клас Vote (Опитування)
class Vote extends parseString {
/* *
* Кількість варіантів відповіді
*
* @var int
*/
public $col_vote;
/* *
* Масив із індетефікаторами
*
* @var array
*/
public $arr;
/* *
* Конструктор класу
*
* @param string $str лінія для обробки
* @param string $col_vote кількість варіантів відповіді
*/
function __construct($str, $col_vote = 1) {
$this->col_vote = $col_vote;
$str = $this->string($str);
$this->arr = $this->string_to_array($str, $this->col_vote);
}
/* *
* Додаємо якщо немає/видаляєм якщо є ідентифікатор
*
* @param string|int $id ідентифікатор
* @param int $id до якого варіанту відповіді додаєм/видаляєм ідентифікатор
* число від 0 до $col_vote-1
* @return strsng віддає лінію із доданим/видалиним індетефікатором
*/
function add($id, $cheng = 0) {
$arr_p = array();
foreach($this->arr as $mas)
if(in_array($id, $mas)) {
$noadd = 1;
$mas_flip = array_flip($mas);
unset($mas_flip[$id]);
$mas = array_flip($mas_flip);
$arr_p[] = $mas;
}
else
$arr_p[] = $mas;
if(!isset($noadd))
if(!is_array($arr_p[$cheng]))
$arr_p[$cheng] = array($id);
else
$arr_p[$cheng][] = $id;
return $this->array_to_string($arr_p);
}
/* *
* Кількість ідентифікаторів
*
* @return array
*/
function view() {
$r_arr = array();
foreach($this->arr as $mas)
$r_arr[] = count($mas);
return $r_arr;
}
/* *
* Чи є ідентифікатор в базі
*
* @param string|int $id ідентифікатор
* @return array
*/
function in_vote($id) {
$r_arr = array();
foreach($this->arr as $mas)
if(in_array($id, $mas))
$r_arr[] = TRUE;
else
$r_arr[] = FALSE;
return $r_arr;
}
/* *
* Отримуємо ідентифікатори опитаних
*
* @param string|int $cheng умова виводу
* all - всі ідентифікатори
* число від 0 до $col_vote-1 для виводу ідентифікаторів одного з варіантів відповіді
* @return array
*/
function uslist($cheng = 'all') {
return $this->arr[$cheng];
if($cheng == 'all')
return $this->to_flat_array($this->arr);
}
}