Зацените url_serialize

NEK

Guest
Зацените url_serialize

Вот код (можно серилизовать для передачи по методу $_GET)
PHP:
<?function url_serialize(){
    /*NEK - htpp://kpss7.h10.ru
    /*8 Aug 2003 -> url_serialize()
    /*первый параметр должен быть масивом имен сериализ. переменныых
    /*все остальные параметры масивы и переменные
    /*результат=стока для
    /* host.ru/truba.php?$url_serialize(array('d','d2'),array(1,2=>array(5)),'any');
    /**/
    function array2url(&$var,$h,&$t,$level=0){
     if (is_array($var)){
       for(reset($var),$level++;list($k,$v)=each($var);)
         if($r=array2url($v,$h.'%5B'.$k.'%5D',$t,$level))
           $t.='&'.$h.'%5B'.$k.'%5D='.$r;
     } else return urlencode($var);
   }
   if(!is_array($name=func_get_arg($i)) Die('Первый параметр не масив !!!');
   array_unshift($name,'');//первый пустой аргумент
   for($i=1;$i<func_num_args();$i++){
     $a=func_get_arg($i);$t=NULL;
     if(is_array($a)) array2url($a,$name[$i],$t);//если масив
     else $t='&'.$name[$i].'='.urlencode($a);    //иначе
     $st.=$t;//соелиняем стороки
   }
   return substr($st,1);//возвращем результат
 }?>
<?$a=array(1,2,'df'=>'dfg',5=>array(7,8=>array(1)));
  echo 'url: '.$url=url_serialize(array('d'),$a);
  /* echo '<br>';
   $url=str_replace('%5B','[',$url);
   $url=str_replace('%5D',']',$url);
   $url=str_replace('&','<br>',$url);
   echo 'url:<blockquote>'.$url.'</blockquote>';
  /**/
?>
Может кому-то надо ???
 

PhpDeveloper

Guest
Предлагаю такое решение:
PHP:
$serialize_array = serialize($my_array);
:)
 

NEK

Guest
Автор оригинала: Фанат
Ниче не понял.
а что она делает-то?
и зачем?
Ну например имеется некая функция Хa получающая некий масив X из $_GET и некоторая Y функция - Ya со своим масивом и т.д.
И все это надо кидать через $_GET.( Нельзя ничего затирать и что там не знаю)
Делаем :
PHP:
echo '<a href="to_zlo.php?'.url_serialize(array('Xa','Ya'),$Xa,$Ya).'>Other_link</a>';
 

NEK

Guest
Автор оригинала: PhpDeveloper
..serialize($my_array);
Весь прикол в том, что надо передать масив именно как $_GET параметр (чтоб РНР сам разобрал и сообразил чего иму передали). :)
 

ForJest

- свежая кровь
А нафига? - спрашивается в задаче.
Вложенные массивы у тебя поддерживаются?
PHP:
//скрипт 1
<?php
$array = (array(1,2,4,5), "something"=> "#$^%#$%");
$url_param = url_encode(serialize($array));
?>
//скрипт 2
<?php
$array = unserialize($_GET['ulr_param']);
?>
Зачем париться - ты можешь объяснить?
 

Фанат

oncle terrible
Команда форума
я одного не могу понять - почему он так часто использует словао "сериализация"
какой смысл он в это вкладывает?
 

NEK

Guest
Автор оригинала: ForJest
А нафига? - спрашивается в задаче.
Зачем париться - ты можешь объяснить?
Если б я знал какой у меня масив изначально все было бы клёво.
Все в том что я этого не знаю. Т.е. я не знаю его глубины, а имею только название !!!
 

Фанат

oncle terrible
Команда форума
нек, если у тебя ассоциативвный массив, то его ОБЯЗАТЕЛЬНО надо передавать сериализованным.
поэтому все твои извращения несколько излишни.
в первом скрипте
s.php?sarr=serialize($array)
во втором-
$array=unserialize($sarr)

согласись - это гораздо проще и работает с любыми массивами
 

NEK

Guest
Автор оригинала: Фанат
нек, если у тебя ассоциативвный массив, то его ОБЯЗАТЕЛЬНО надо передавать сериализованным. ...
согласись - это гораздо проще и работает с любыми массивами
Так вот он и получается серилизованым только $array=unserialize($sarr) занимается РНР. Это тоже работает с любыми масивами кто сказал что нельзя так ->
PHP:
$st=url_serialize(array('asociativ'),array('kirpch'=>'dom',
'truba'=>'pech','tualet'=>array('unitaz'=>'white',
'stena'=>'black','plitka'=>array('kvadrat','granit')));
 

Фанат

oncle terrible
Команда форума
и что передается в адресной строке в результате?
 

Falc

Новичок
Не понял зачем все это, когда есть стандартные функции.
Да и зачем вообще массивы передавать методом GET?
 

NEK

Guest
Автор оригинала: Georgy
а для того, чтобы гемора было больше:)
Да нет просто один нехороший человек ниже может додуматься, что что-то надо поменять и придется:
PHP:
 $ar=unserialize($kirpich);
 $kirpich['f']=8;
 $ar=serialize($kirpich);
А так $serialize_for_get_ar.='&'.'%5Bf%5D=8';
 

NEK

Guest
Автор оригинала: Фанат
и что передается в адресной строке в результате?
url: asociativ%5Bkirpch%5D=dom&asociativ%5Btruba%
5D=pech&asociativ%5Btualet%5D%5Bunitaz%
5D=white&asociativ%5Btualet%5D%5Bstena%
5D=black&asociativ%5Btualet%5D%5Bplitka%5D%5B0%
5D=kvadrat&asociativ%5Btualet%5D%5Bplitka%5D%5B1%
5D=granit
Или в людском виде url:
asociativ[kirpch]=dom
asociativ[truba]=pech
asociativ[tualet][unitaz]=white
asociativ[tualet][stena]=black
asociativ[tualet][plitka][0]=kvadrat
asociativ[tualet][plitka][1]=granit
 

NEK

Guest
Автор оригинала: Falc
Не понял зачем все это, когда есть стандартные функции.
Да и зачем вообще массивы передавать методом GET?
Ну есть один скрипт и 10 форм т.е. для каждой формы свой масив, но некоторые штуки которые должны передаваться паралельно.
 

ForJest

- свежая кровь
NEK а ты слышал про сессии? Это такая секретная разработка для PHP.
 
Сверху