Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вставить переменные в языковую конструкцию list()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
zypikov
Отправлено: 03 Апреля, 2012 - 01:10:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




Есть функция в которую передается переменное число параметров. Через func_get_args() эти переменные можно получить. Возможно ли как-то теперь эти переменные вставить в языковую конструкцию list(переменныеПереданныеВФункцию)?


-----
У всего есть обратная сторона.
 
 Top
DlTA
Отправлено: 03 Апреля, 2012 - 01:23:41
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




list(.......)=func_get_args();
 
 Top
EuGen Администратор
Отправлено: 03 Апреля, 2012 - 09:11:51
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




PHP:
скопировать код в буфер обмена
  1. function test()
  2. {
  3.    list($mParam0, $mParam1)=func_get_args();
  4.    var_dump($mParam0, $mParam1);
  5. }
  6.  
  7. test('foo', 'bar', 'baz');

Однако непонятно, зачем так делать - т.к. все преимущество func_get_args() теряется (ведь придется определять список параметров для list непосредственно, а значит, проще перечислить параметры просто в заголовке функции)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
zypikov
Отправлено: 03 Апреля, 2012 - 15:19:00
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




Цитата:
т.к. все преимущество func_get_args() теряется

Ну разумеется теряется. Смысл моего вопроса именно в том, возможно ли сформировать список переменных для конструкции list из ВСЕХ переменных переданных в функцию?
Т.е. не указывая непосредственно в конструкции list имена переменных, как вашем примере EnGen.

Передал я , к примеру, в test 4 переменные, list попали 4 переменные; передал 2 переменные, в list попали 2 переменные.


-----
У всего есть обратная сторона.
 
 Top
EuGen Администратор
Отправлено: 03 Апреля, 2012 - 15:25:43
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




zypikov
Именно list() - нет, не получится. Но можно сделать наподобие такого:
PHP:
скопировать код в буфер обмена
  1. function test()
  2. {
  3.    extract(func_get_args(), EXTR_PREFIX_ALL, 'arg');
  4.    var_dump($arg_0, $arg_1, $arg_2);
  5.    //или var_dump(get_defined_vars());
  6. }
  7.  
  8. test('foo', 'bar', 'baz');


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
zypikov
Отправлено: 05 Апреля, 2012 - 12:30:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




Может в php6 такое возможно будет сделать?
С get_defined_vars() это хоть какой-то выход.
пасиб за помощь EuGen.


-----
У всего есть обратная сторона.
 
 Top
EuGen Администратор
Отправлено: 05 Апреля, 2012 - 12:51:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




zypikov
Это и в PHP 5 будет работать (предполагаю, что исходную задачу это все же решает, как того и требовалось)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
zypikov
Отправлено: 07 Апреля, 2012 - 22:08:00
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




EuGen пишет:
Это и в PHP 5 будет работать (предполагаю, что исходную задачу это все же решает, как того и требовалось)Это и в PHP 5 будет работать (предполагаю, что исходную задачу это все же решает, как того и требовалось).


EnGen, или я вас сейчас не пойму или вы меня не поняли. Я подразумевал, свой первый вопрос.
zypikov пишет:
Есть функция в которую передается переменное число параметров. Через func_get_args() эти переменные можно получить. Возможно ли как-то теперь эти переменные вставить в языковую конструкцию list(переменныеПереданныеВФункцию)?


Я объясню какую задачу хочу решить, т.е. упростить себе жизнь
Есть база в текстовом файле, например, date||name||describe||foto1_foto2..||fieldN

хочу вытягивать переменные date и name на одной ветке if, на другой ветке describe
и делать это все с помощью одной функции, например, vte_Extract(). А уж потом делать с ними че захочешь.
Причем любой из этих параметров может быть составным, как, например, foto1_foto2.., который бъется тоже на переменные через "_".
Или вот я захотел, например, добавить(или удалить) параметр, да еще и в определенное место, между describe||foto1_foto2..||. Выходит нужно будет менять в позиции переменных в конструкции list(variables).

Поэтому решил в значение переменной указывать ее положение в строке разбития. Причем если переменная является массивом, то переменную еще нужно разбивать (в массиве передавать параметром разделитель). И в этом случае, чтобы переменную извлечь нужно просто в ее значение указать ее номер или, если это массив, передать еще разделитель.

написал функцию
PHP:
скопировать код в буфер обмена
  1.  
  2. $strVal        = "";
  3. $totalVariable = 8;
  4. $discribe      = 1;
  5. $name          = 0; // позиция в строке разбития
  6. $images        = array("position" => "3", "devider" => "_");
  7.  
  8. function vte_Extract(){
  9.   global $totalVariable;
  10.   $arg_list = func_get_args();
  11.   for ($i = 0; $i < count($arg_list); $i++) {
  12.     if(is_array($arg_list[$i])){
  13.         $mas = $arg_list[$i];
  14.         $index = $mas['position'];
  15.         $devider = $mas['devider'];
  16.     }else{
  17.         $index = $arg_list[$i];
  18.     }
  19.     if (isset($devider) && $devider != ""){
  20.       $str[$i]['devider'] = $devider;
  21.       $devider = "";
  22.     }
  23.  
  24.     $str[$i]['position'] = $index;
  25.   }
  26.   sort($str);
  27.   $first = TRUE;
  28.  // $last = false;
  29.   $max =  $arg_list[count($arg_list)];
  30.   for($q = 0; $q <= count($arg_list) - 1; $q++){
  31.   // if(!isset($arg_list[$q+1])){break;}
  32.     if($first){
  33.       $first = false;
  34.       if($str[0]["position"] !== 0){
  35.         $niz = 0;
  36.         $top = $str[$q]["position"];
  37.       }
  38.     }else{
  39.         $niz = $str[$q-1]["position"];
  40.         $top = $str[$q]["position"];
  41.     }
  42.     $raz = $top - $niz;
  43.     if ($raz !== 0){
  44.          for ($i = $niz+1; $i <= $top-1; $i++)
  45.            $strR .= ",";
  46.     }  if($q == count($arg_list)-1){ $strR .=  "\$vaL".$str[$q]["position"];}else{
  47.        $strR .=  "\$vaL".$str[$q]["position"].","; }
  48.  
  49.   }
  50.  
  51. $general = @implode("",@file("testScript.php"));
  52.  
  53. preg_match ("~#1(.*)#2~s",$general,$otsek1);  $otseks1 = "~".preg_quote ($otsek1[0],"~")."~s";
  54. $ss = "myName||MyData||foto.jpg";
  55. $per = "list($strR) = explode(\"||\",\"$ss\")";
  56. $content = preg_replace($otseks1,$per,$general);
  57. $fp = fopen("testScript.php",'w');
  58. fputs($fp,$content);
  59. fclose($fp);
  60. include('testScript.php');
  61. echo $vaL0;
  62.  
  63. }
  64.  


Но сначала не продумал, что свой функцией я генерирую строку и тупо вставить в list() ее не получиться. Единственный выход писать строку в пхп файл и потом ее инклюдить.
Т.е. идея в том, чтобы получить хоть чуток масштабируемый тестовую базу. Чтобы можно было любой пар-р удалить, добавить, сделать составным и не перелопачивать все скрипты.

В связи с этим есть вопросы:
Если например, в конструкции list(var1,,var3) пропускать 3 переменную, то измениться ли производительность, если list(var1,var2,var3) 2 переменную извлекать?
Стоит ли вообще делать сайты на текстовой базе? Или все поглотил mysql и текстовая база скатывается на обочину историию..?

(Отредактировано автором: 07 Апреля, 2012 - 22:12:21)



-----
У всего есть обратная сторона.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB