PHP.SU

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

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

> Найдено сообщений: 7
Nicodinus Отправлено: 14 Марта, 2012 - 16:45:00 • Тема: Задать значение массива в массиве • Форум: Объектно-ориентированное программирование

Ответов: 4
Просмотров: 1192
OrmaJever, я понимаю, но мне нужно решить данную проблему Огорчение
Nicodinus Отправлено: 14 Марта, 2012 - 16:13:37 • Тема: Задать значение массива в массиве • Форум: Объектно-ориентированное программирование

Ответов: 4
Просмотров: 1192
OrmaJever, это я написал, чтоб было хоть понятно что я хочу) Как бы функция независима, т.е. можно вызвать SetValueInArray('key1',.....,'key100500','value'), и она запишет в $array['key1']......['key100500'] значение 'value'

Вот как это сделать, я хз)
Nicodinus Отправлено: 14 Марта, 2012 - 16:05:22 • Тема: Задать значение массива в массиве • Форум: Объектно-ориентированное программирование

Ответов: 4
Просмотров: 1192
PHP:
скопировать код в буфер обмена
  1. class temp
  2. {
  3.         private $vars = array();
  4.        
  5.         public function GetValueFromArray()//Пример: вызов GetValueFromArray('key1','key2','key3','value') вернёт $array['key1']['key2']['key3']
  6.         {//ps. Может быть есть более удобная функция?
  7.                 $args = func_get_args();
  8.                 $temp = null;
  9.                 for($i = 0; $i < sizeof($args)-1; $i++)
  10.                 {
  11.                         if(!$temp && isset($this->vars[$args[$i]])) $temp = $this->vars[$args[$i]];
  12.                         else if(isset($temp[$args[$i]])) $temp = $temp[$args[$i]];
  13.                         else break;
  14.                 }
  15.                 return $temp[$args[sizeof($args)-1]];
  16.         }
  17.        
  18.         public function SetValueInArray()
  19.         {
  20.                 $args = func_get_args();
  21.                 //Как сделать так, чтоб можно было задать значение в массиве по ключам, заданным в $args ?
  22.                 //Т.е. $array[$args[0]][$args[1]][$args[2]] = $args[3];
  23.                 //$args[3] - само значение, $args[0] - $args[2] - ключи
  24.         }
  25.        
  26.         public function __construct()
  27.         {
  28.                 $this->vars['key1']['key2']['key3'] = 'value';
  29.                 print_r($this->GetValueFromArray('key1','key2','key3'));
  30.         }
  31. }
  32.  
  33. $test = new temp;


Собственно вопрос, как задать значение массива по ключам, заданным в $args ? (функция SetValueInArray)

ps. Можно ли как то упростить функцию GetValueFromArray ?
Nicodinus Отправлено: 21 Февраля, 2012 - 11:54:32 • Тема: Вызов класса как функции • Форум: Объектно-ориентированное программирование

Ответов: 4
Просмотров: 1283
sKaa, спасибо огромное, помогло Закатив глазки , жаль что + не могу поставить Хм
(Добавление)
Zuldek, ты немного меня не понял Радость, я не настолько туп, чтоб так не сделать, вон вариант с __invoke() тащит

PHP:
скопировать код в буфер обмена
  1. class test
  2. {
  3.         public $vars = array();
  4.        
  5.         public function __invoke()
  6.         {
  7.                 $args = func_get_args();
  8.                 $this->add($args);
  9.         }
  10.        
  11.         public function add($args) //Сама функция
  12.         {
  13.                 for($i = 1; $i < sizeof($args); $i += 2) $this->vars[$args[$i-1]] = $args[$i];
  14.                 //пример конечно не удачный, но другого я придумать не смог
  15.         }
  16. }
  17.  
  18. $test = new test;
  19. $test('123', '456', '789', '012');
  20. print_r($test->vars);
Nicodinus Отправлено: 21 Февраля, 2012 - 11:44:05 • Тема: Вызов класса как функции • Форум: Объектно-ориентированное программирование

Ответов: 4
Просмотров: 1283
Собственно хотел узнать, возможно ли вызвать уже инициализированный класс как функцию? Огорчение

Допустим имеем код
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class test //Думаю тут нужно подключить интерфейс из spl или ещё какой-нить библиотеки, но какой не могу найти//
  3. {
  4.         private $vars = array();
  5.        
  6.         public function add() //Сама функция
  7.         {
  8.                 $args = func_get_args();
  9.                 for($i = 1; $i < sizeof($args); $i += 2) $this->vars[$args[$i-1]] = $args[$i];
  10.                 //пример конечно не удачный, но другого я придумать не смог
  11.         }
  12. }
  13.  
  14. $test = new test;
  15. $test($key1, $value1, $key2, $value2);
  16. ?>
Nicodinus Отправлено: 10 Января, 2012 - 17:48:45 • Тема: Проблема с is_file в while(true) цикле • Форум: Если скрипт не работает

Ответов: 2
Просмотров: 1900
LIME, спасибо, помогло
Nicodinus Отправлено: 10 Января, 2012 - 17:13:16 • Тема: Проблема с is_file в while(true) цикле • Форум: Если скрипт не работает

Ответов: 2
Просмотров: 1900
В общем возникла необходимость проверять на существование "стоп" файла для парсера.

Собсно код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if(isset($_SERVER['HTTP_HOST'])) die('You can run this script only in the CMD prompt');
  4.  
  5. $headers = array(
  6.         'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  7.         'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
  8.         'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3',
  9. );
  10.  
  11. function out($str = '') { echo date('d.m.Y - H:i:s').': '.$str.chr(13).chr(10); }
  12.  
  13. out('starting...');
  14.  
  15. $f = fopen(basename(__FILE__).'.log','a');
  16.  
  17. $p = 0;
  18. $f2 = 0;
  19. for($i = 1; $i < 79000; $i++)
  20. {
  21.         if(is_file('last'))
  22.         {
  23.                 $i = intval(file_get_contents('last'));
  24.                 unlink('last');
  25.         }
  26.        
  27.         if(intval($i / 790) != $p || $f2 == 0)
  28.         {
  29.                 $p = intval($i / 790);
  30.                 out($p.'%');
  31.                 $f2 = 1;
  32.         }
  33.        
  34.         if(is_file('stop'))
  35.         {
  36.                 out('event - stop from file!');
  37.                 out('this script will continue, after you remove the stop file');
  38.                 out('5 sec sleeping!');
  39.                
  40.                 $t = fopen('last','w');
  41.                 fputs($t,$i);
  42.                 fclose($t);
  43.                
  44.                 while(true)
  45.                 {
  46.                         if(!is_file('stop')) break;
  47.                         out('sleep');
  48.                         sleep(5);
  49.                 }
  50.         }
  51.        
  52.         $ch = curl_init('http://eu.battle.net/wow/ru/item/'.$i.'/tooltip');
  53.         curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
  54.         curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  55.         curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
  56.         curl_setopt($ch, CURLOPT_HEADER, 1);
  57.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  58.         $content = curl_exec($ch);
  59.         $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  60.         curl_close($ch);
  61.        
  62.         if($code == 200)
  63.         {
  64.                 fputs($f,date('d.m.Y - H:i:s').': item '.$i.chr(13).chr(10));
  65.                 out('item '.$i);
  66.                 $t = fopen('data/'.$i.'.txt', 'w');
  67.                 fputs($t, $content);
  68.                 fclose($t);
  69.         }
  70.        
  71.         usleep(100000);
  72. }
  73.  
  74. fclose($f);
  75. ?>
  76.  


Эта:
PHP:
скопировать код в буфер обмена
  1.  
  2. while(true)
  3. {
  4.         if(!is_file('stop')) break;
  5.         out('sleep');
  6.         sleep(5);
  7. }
  8.  

часть, работает не так, как хотелось бы.

Создайте рядом со скриптом пустой файл "stop", запустите скрипт, подождите пару секунд и удалите файл. Казалось бы, if(!is_file('stop')) break; завершит цикл и парсер будет дальше парсить данные. Но нет, ему кажется, что файл существует, хотя функции на считывания работают нормально, т.е. выводят ошибку, что файл не существует. Можно и с помощью них обойтись, но хотелось бы услышать мнение форумчан.

пс. Если как то поможет, php 5.3.8, запускаю из консоли

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB