Почему функция serialize одинаковых значений выдаёт разный ответ?
serialize(array("1"=>"1", "2"=>"3"));
Тут массив из 2-ух элементовa:2:{i:1;s:1:"1";i:2;s:1:"3";}
тут мы видим а:2 - массив состоящий из двух элементов. При этом внутри видим i:1;s:1:''1". 
Это значит ключ типа integer 1 и значение типа string с 1 символом "1". Второй элемент аналогично.$str = '"1"=>"1", "2"=>"3"';
serialize(array($str));
Тут же ты создал строку '"1"=>"1", "2"=>"3"', которая преобразуется в массив с одним элементом и ключом 0. Из сериализации ту увидишь: a:1:{i:0;s:18:""1"=>"1", "2"=>"3"";}
Массив с 1-им элементом. Ключ типа integer и равен 0, а значение - string из 18 символов и равно '"1"=>"1", "2"=>"3"'
Для разбивки той строки на подстроки есть функция 
И это будет выглядеть примерно так: $str = '1, 3';
serialize( explode(',' , $str) );
в общем, так нельзя:$str = '"1"=>"1", "2"=>"3"';
serialize(array($str));
правильно:$str = array("1"=>"1", "2"=>"3");
serialize($str);
массив состоит из 'ключ' => 'значение', а не строка " 'ключ' => 'значение' "